一个非常简单的解决方案:您可以确保您的数据集合是规范化的,即所有属性都存在于每个对象中(如果它们未使用,则为空值)。像这样的功能可以帮助:
function normalizeCollection (collection, properties) {
properties = properties || [];
return _.map(collection, function (obj) {
return _.assign({}, _.zipObject(properties, _.fill(Array(properties.length), null)), obj);
});
}
(注:_.zipObject
和_.fill
在最新版本的 lodash 中可用,但没有下划线)
像这样使用它:
var coll = [
{ id: 1, name: "Eisenstein"},
{ id: 2 }
];
var c = normalizeCollection(coll, ["id", "name", "age"]);
// Output =>
// [
// { age: null, id: 1, name: "Eisenstein" },
// { age: null, id: 2, name: null }
// ]
当然,您不必永久转换数据 - 只需在调用模板渲染函数时动态调用该函数:
var compiled = _.template(""); // Your template string here
// var output = compiled(data); // Instead of this
var output = compiled(normalizeCollection(data)); // Do this