プロパティとして個々のオブジェクト内にある2つの配列をマージする方法


8

次のような2つのオブジェクトがあります。

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

このように単一の配列内でそれらをマージする必要があります

let newObj = ["5e0301f353ee2a0546298f15", "5e03050453ee2a0546298f1c"]

lodash unionとmapを使ってみましたが、うまくいきませんでした。

回答:


15

1行のコードソリューション:

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

const result = [...new Set([...obj1.slotIDs, ...obj2.slotIDs])]
console.log(result)


5

Vanilla JSを使用するとArray.flatMap()slotIDsIDの配列を取得するためにを反復して返すことができます。重複を削除するには、配列からセットを作成し、セットを配列に広げます。

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

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

console.log(result)

lodashを使用すると_.flatMap()slotIDsIDの配列を取得するために反復処理を行うことができます。使用_.uniq()重複を削除するには:

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

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

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


3

試す

let newObj= []
for(const value in Object.assign(obj1,obj2)["slotIDs"])
newObj.push(Object.assign(obj1,obj2)["slotIDs"][value])

編集-これは、より簡単なバージョンまたは1行のバージョンです。

let newObj=Object.assign(obj1,obj2)["slotIDs"]

@OriDroriが示唆したように、上記のメソッドはobj1自体を変更し、Obj1に複数のキーと値のペアがある類似の質問ではうまく機能しません。それを避けるためにあなたがすることはここにあります

let newObj=Array.from(new Set(obj1.slotIDs.concat(obj2.slotIDs)))

クイックノート-の使用Array.from()はオプションです。


1
シンプルで複雑なロジックですが、動作します
Mian Muhammad

@MianMuhammad私は議論しません、それはあなたがそれを好む方法です:-)
Saurav

コードはでオーバーライドobj1.slotIDsobj2.slotIDs、配列をマージせず、一意の値のみを取得します。別の一意のIDをに追加obj1.slotIDsすると、結果に表示されなくなります。または、割り当て先のオブジェクトの順序を変更してobj2, obj1、結果を確認します。
Ori Drori

@OriDroriソリューションが問題であったのは質問固有であり、それは最良のソリューションではない、と私は同意します。
Saurav

私もより良い解決策を追加します:)
Saurav

2

Object.assign(obj1, obj2).slotIDs

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

const result = Object.assign(obj1, obj2).slotIDs

console.log(result)


コードはでオーバーライドobj1.slotIDsobj2.slotIDs、配列をマージせず、一意の値のみを取得します。別の一意のIDをに追加obj1.slotIDsすると、結果に表示されなくなります。または、割り当て先のオブジェクトの順序を変更してobj2, obj1、結果を確認します。
Ori Drori

1

編集:

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

let result = Array.from( new Set(obj1.slotIDs.concat(obj2.slotIDs)) )

console.log(result)


古い答え:

いかが{ ...obj1, ...obj2 }.slotIDsですか?

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

let result = { ...obj1, ...obj2 }.slotIDs

console.log(result)


1
ワオ、それはもう1つの簡単な解決策ですありがとう:)
Mian Muhammad

0

オブジェクトが配列の値を保持する追加のプロパティを持つことができ、これらすべてを一意の配列にマージして、で使用Object.entries().map()Setから、重複を削除する場合:

const obj1 = { slotIDs: ["5e0301f353ee2a0546298f15"], itemIds: ["xyz123"] };
const obj2 = { slotIDs: ["5e0301f353ee2a0546298f15", "5e03050453ee2a0546298f1c"], itemids: ["xyz123", "abc123"] };

const res = [...new Set([obj1, obj2].map(Object.values).flat(2))];
console.log(res);

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.