So führen Sie zwei Arrays, die sich in einzelnen Objekten befinden, als Eigenschaft zusammen

8

Ich habe zwei Objekte wie dieses:

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

Ich muss sie in einem einzigen Array wie diesem zusammenführen

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

Ich habe versucht, lodash union und map zu verwenden, aber kein Glück.

Mian Muhammad
quelle

Antworten:

15

Eine Codezeilösung :

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

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

Loi Nguyen Huynh
quelle
5

Mit Vanilla JS können Sie mit iterieren Array.flatMap()und das zurückgeben slotIDs, um ein Array von IDs zu erhalten. Um Duplikate zu entfernen, erstellen Sie ein Set aus dem Array und verteilen Sie das Set wieder auf ein Array:

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

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

console.log(result)

Mit lodash können Sie iterieren _.flatMap()und slotIDseine Reihe von IDs abrufen. Verwendung _.uniq()So entfernen Sie Duplikate:

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>

Ori Drori
quelle
3

Versuchen

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

Bearbeiten - Hier ist eine einfachere oder einzeilige Version.

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

Wie von @OriDrori vorgeschlagen, ändern die oben genannten Methoden das obj1 selbst und funktionieren bei ähnlichen Fragen, bei denen Obj1 mehrere Schlüssel-Wert-Paare hat, nicht gut. Folgendes tun Sie, um dies zu vermeiden

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

Kurznotiz - Die Verwendung von Array.from()ist optional.

Saurav
quelle
1
Es ist eine komplizierte Logik für eine einfache, aber es funktioniert
Mian Muhammad
@MianMuhammad Ich werde nicht streiten, es ist nur so, wie Sie es bevorzugen :-)
Saurav
Ihr Code überschreiben obj1.slotIDsmit obj2.slotIDsund verschmelzen nicht die Arrays und bekommt nur die eindeutigen Werte. Fügen Sie dem eine weitere eindeutige ID hinzu, die obj1.slotIDsim Ergebnis verschwindet, oder ändern Sie einfach die Reihenfolge der Objekte in der Zuweisung obj2, obj1und überprüfen Sie das Ergebnis.
Ori Drori
@OriDrori die Lösung war Problem war Frage spezifisch und es ist nicht die beste Lösung, ich stimme zu.
Saurav
Ich werde aber auch eine bessere Lösung hinzufügen :)
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)

Hunh versuchen
quelle
Ihr Code überschreiben obj1.slotIDsmit obj2.slotIDsund verschmelzen nicht die Arrays und bekommt nur die eindeutigen Werte. Fügen Sie dem eine weitere eindeutige ID hinzu, die obj1.slotIDsim Ergebnis verschwindet, oder ändern Sie einfach die Reihenfolge der Objekte in der Zuweisung obj2, obj1und überprüfen Sie das Ergebnis.
Ori Drori
1

BEARBEITEN:

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

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

console.log(result)


Alte Antwort:

Wie wäre es { ...obj1, ...obj2 }.slotIDs?

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

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

console.log(result)

Larry N.
quelle
1
Wao, das ist eine weitere einfache Lösung Danke :)
Mian Muhammad
0

Wenn Ihr Objekt zusätzliche Eigenschaften haben kann, die Array-Werte enthalten, und Sie alle diese Eigenschaften zu einem eindeutigen Array zusammenführen möchten, Object.entries()mit dem Sie die Duplikate entfernen können, .map()und dann a 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);

Nick Parsons
quelle