【问题标题】:How to map a multidimensional array (using Underscore)?如何映射多维数组(使用下划线)?
【发布时间】:2014-04-02 01:32:04
【问题描述】:

我有一个大型的多维 JSON 对象数组,我想通过这些对象进行映射(使用下划线)。例如:

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 实际上并不是我想要循环的“列表”。

还是我完全想错了?

【问题讨论】:

  • 您希望结果是像您的输入一样的数组数组吗?
  • 是的。与输入完全相同,但每个对象都是一个主干模型。

标签: javascript arrays dictionary underscore.js


【解决方案1】:

迭代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' } ] ]

【讨论】:

    猜你喜欢
    • 2017-10-29
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多