我有一个大型的多维JSON对象数组,我希望通过它来映射(使用Underscore)。例如:
var dummyData = [
[{title: 'a'},{title : 'b'}],
[{title: 'a'},{title : 'b'}],
[{title: 'a'},{title : 'b'}],
[{title: 'a'},{title : 'b'}]
];
对于_.map
的函数体,我想通过Backbone Model构造函数运行每个JSON对象。到目前为止,我已经尝试过这样的事情来实现这个目标:
_.map(dummyData, function() {
_.each(dummyData, function(el, i) {
// run each object through the constructor
}
})
我现在被_.each
所吸引 - 因为dummyData
实际上并不是我想要循环的'列表'。
或者我是否完全在想这个错误?
答案 0 :(得分:10)
迭代dummyData
的元素,_.map
就像这样
_.map(dummyData, function(currentDummyData) {
return _.map(currentDummyData, function(el, i) {
// run each object through the constructor
})
});
dummyData
是一个数组数组。当你使用_.map
时,它会获取数组数组中的每个数组并传递给我们接受function(currentDummyData) {..}
的函数。
在该函数中,我们再次_.map
该数组,因为它仍然是一个数组。因此,我们迭代它以获取单个元素并将它们传递给函数function(el, i) {..}
,在那里创建新的Backbone模型。
注意:您必须返回_.map
的结果,就像在答案中一样。因为,_.map
期望被调用的函数返回一个对象,并且将收集所有返回的对象以创建一个新数组。
例如,
console.log(_.map(dummyData, function(currentDummyData) {
return _.map(currentDummyData, function(el, i) {
return {title: el.title + el.title};
})
}));
将产生
[ [ { title: 'aa' }, { title: 'bb' } ],
[ { title: 'aa' }, { title: 'bb' } ],
[ { title: 'aa' }, { title: 'bb' } ],
[ { title: 'aa' }, { title: 'bb' } ] ]