如何将单个对象内的两个数组合并为属性

Mia*_*mad 9 javascript higher-order-functions lodash

我有两个这样的对象:

let obj1 = { slotIDs: ["5e0301f353ee2a0546298f15"] }
let obj2 = { slotIDs: ["5e0301f353ee2a0546298f15", "5e03050453ee2a0546298f1c"] }
Run Code Online (Sandbox Code Playgroud)

我需要像这样将它们合并到一个数组中

let newObj = ["5e0301f353ee2a0546298f15", "5e03050453ee2a0546298f1c"]
Run Code Online (Sandbox Code Playgroud)

我试过使用 lodash union 和 map 但没有运气。

Huỳ*_*yễn 15

一行代码解决:

let obj1 = { slotIDs: ['5e0301f353ee2a0546298f15'] }
let obj2 = { slotIDs: ['5e0301f353ee2a0546298f15', '5e03050453ee2a0546298f1c'] }

const result = [...new Set([...obj1.slotIDs, ...obj2.slotIDs])]
console.log(result)
Run Code Online (Sandbox Code Playgroud)


Ori*_*ori 5

使用 Vanilla JS,您可以迭代Array.flatMap()并返回slotIDs以获取 id 数组。要删除重复项,请从数组中创建一个 Set,然后将 Set 传播回数组:

const obj1 = { slotIDs: ['5e0301f353ee2a0546298f15'] }
const obj2 = { slotIDs: ['5e0301f353ee2a0546298f15', '5e03050453ee2a0546298f1c'] }

const result = [...new Set([obj1, obj2].flatMap(o => o.slotIDs))]

console.log(result)
Run Code Online (Sandbox Code Playgroud)

使用 lodash,您可以迭代_.flatMap()slotIDs获取 id 数组。用于_.uniq()删除重复项:

const obj1 = { slotIDs: ['5e0301f353ee2a0546298f15'] }
const obj2 = { slotIDs: ['5e0301f353ee2a0546298f15', '5e03050453ee2a0546298f1c'] }

const result = _.uniq(_.flatMap([obj1, obj2], 'slotIDs'))

console.log(result)
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>
Run Code Online (Sandbox Code Playgroud)