【问题标题】:Union of array inside array using lodash使用 lodash 合并数组内的数组
【发布时间】:2016-09-15 15:36:07
【问题描述】:

如何使用 lodash 合并数组内的数组?

例如:

输入:

var x = [ [1,2,3,4], [5,6,7], [], [8,9], [] ];

预期输出:

x = [1,2,3,4,5,6,7,8,9];

目前我的代码执行以下操作:

return promise.map(someObjects, function (object)) {
    return anArrayOfElements();
}).then(function (arrayOfArrayElements) {
    // I tried to use union but it can apply only on two arrays
    _.union(arrayOfArrayElements);
});

【问题讨论】:

标签: javascript arrays node.js promise lodash


【解决方案1】:

只需使用原生函数 reduce 减少它

arr.reduce(function(previousValue, currentValue) { 
    return previousValue.concat(currentValue);
}, []);

这会将 reduce 回调函数应用于数组的每个元素,并针对您展示的用例进行归约。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

【讨论】:

    【解决方案2】:

    使用apply 方法将数组值作为参数传递:

    var union = _.union.apply(null, arrayOfArrayElements);
    

    [https://jsfiddle.net/qe5n89dh/]

    【讨论】:

    • 为什么我们将 null 作为参数传递?
    • 因为我们不需要传递this(见apply定义)。
    【解决方案3】:

    我能想到的最简单的解决方案就是使用concat

    Array.prototype.concat.apply([], [ [1,2,3,4], [5,6,7],[], [8,9], []]);
    

    会产生...

    [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
    

    【讨论】:

    • Concat 不删除重复项,而是 lodash union
    • 啊,我错过了它应该删除欺骗。
    【解决方案4】:

    对我来说有效的答案,所有其他答案都有效,但是当我检查其他帖子时,他们只是使用了 loadash。我不知道帖子中提供的所有答案的最佳语法是什么。 现在使用下面的方法

    _.uniq(_.flatten(x)); // x indicates arrayOfArrayObjects
    // or, using chain
    _(x).flatten().uniq().value();
    

    感谢大家的回答。 :)

    【讨论】:

      猜你喜欢
      • 2018-09-06
      • 2015-07-26
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-31
      • 2023-03-03
      相关资源
      最近更新 更多