javascript - 如何将数组的数组合并到一个数组中(在 JavaScript 中)?

标签 javascript arrays concatenation lodash

我在 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 映射器或其他类似函数来完成?

从我得到的这个阶段已经有一些解决方案(as the solution here),但我想找到一个解决这个问题的解决方案,该解决方案将特定于我的“包含数组类型属性的数组或对象” .

最佳答案

使用 Array.map() 提取属性值, 通过 spreading 压平进入Array.concat() ,并使用 Set获得独特的值(value)。将 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>

关于javascript - 如何将数组的数组合并到一个数组中(在 JavaScript 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51315007/

相关文章:

javascript - 模态显示事件中的模糊内容

javascript - csv 到 javascript 删除第一行?

javascript - 如何根据位置找到最近点?

c - 将 float 舍入并乘以它的字符(c)* 更新

c - 如何连接指针数组

C 字符数组串联内存转储

javascript - HTML 复选框返回值?

javascript - 如何使用Javascript基于动态数据合并多个对象

c# - 如何检查反射类型是否为数组

python - 结构化二维 Numpy 数组 : setting column and row names