繁体   English   中英

如何在一个数组中合并数组数组(在JavaScript中)?

[英]How to merge array of arrays in one array (in JavaScript)?

我在JavaScript中有一组对象。 每个对象都包含名为“ myPropArray”的属性,该属性实际上是另一个数组。 这是此数组的结构:

let myBaseArray = [
    {
        myPropArray: ["s1", "s2"],
        someOtherProp: "randomString1"
    },
    {
        myPropArray: ["s2", "s3"],
        someOtherProp: "randomString2"
    }
]

我需要的是将所有数组都置于该属性下,并将它们全部合并到一个数组中,而无需重复(在JavaScript中)。 这是我的实现(使用lodash):

_.map(myBaseArray , 'myPropArray') 

实际上返回以下结果:

[
  ["s1", "s2"],
  ["s2", "s3"]
]

但是我要完成的是:

["s1", "s2", "s3"]

另外(如果可能的话),我正在尝试避免for-each循环,因为这需要我进行尽可能的优化,我想知道是否可以使用lodash映射器或其他类似函数来完成?

从这个阶段开始我已经有了一些解决方案( 这里是解决方案 ),但是我想找到这个问题的解决方案,该解决方案将特定于我的“包含数组类型属性的数组或对象”。

使用Array.map()提取属性的值,通过扩展Array.concat()展平,然后使用Set获得唯一的值。 将Set传播回数组:

 const myBaseArray = [ { myPropArray: ["s1", "s2"], someOtherProp: "randomString1" }, { myPropArray: ["s2", "s3"], someOtherProp: "randomString2" } ] const result = [...new Set([].concat(...myBaseArray.map((o) => o.myPropArray)))] console.log(result) 

lodash的方式是使用_.flatMap()_.uniq()

 const myBaseArray = [ { myPropArray: ["s1", "s2"], someOtherProp: "randomString1" }, { myPropArray: ["s2", "s3"], someOtherProp: "randomString2" } ] const result = _.uniq(_.flatMap(myBaseArray, 'myPropArray')) console.log(result) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM