如何映射多维数组(使用Underscore)?

时间:2014-04-02 01:32:05

标签: javascript arrays dictionary underscore.js

我有一个大型的多维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实际上并不是我想要循环的'列表'。

或者我是否完全在想这个错误?

1 个答案:

答案 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' } ] ]