Cách hợp nhất hai mảng bên trong các đối tượng riêng lẻ làm thuộc tính


8

Tôi có hai đối tượng như thế này:

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

Tôi cần hợp nhất chúng trong một mảng như thế này

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

Tôi đã thử sử dụng lodash union và map nhưng không gặp may.

Câu trả lời:


15

Một dòng giải pháp :

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

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


5

Với Vanilla JS, bạn có thể lặp lại Array.flatMap()và trả lại slotIDsđể có được một mảng id. Để loại bỏ trùng lặp, hãy tạo Tập hợp từ mảng và trải rộng Đặt lại thành một mảng:

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

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

console.log(result)

Với lodash, bạn có thể lặp lại _.flatMap()và lấy slotIDsđể có được một mảng id. Sử dụng _.uniq()để loại bỏ trùng lặp:

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

Thử

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

Chỉnh sửa- Đây là phiên bản đơn giản hơn hoặc một dòng.

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

Như @OriDrori đã đề xuất, các phương pháp trên làm thay đổi chính obj1 và không hoạt động tốt trong các câu hỏi tương tự trong đó Obj1 có nhiều cặp giá trị, khóa. Đây là những gì bạn làm để tránh điều đó

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

Lưu ý nhanh- Sử dụng Array.from()là tùy chọn.


1
đó là một logic phức tạp cho một đơn giản, nhưng nó hoạt động
Mian Muhammad

@MianMuhammad Tôi sẽ không tranh luận, Đó chỉ là cách bạn thích nó :-)
Saurav

Đang đè của bạn obj1.slotIDsvới obj2.slotIDs, và không hợp nhất các mảng, và chỉ nhận được giá trị duy nhất. Thêm một id duy nhất khác vào obj1.slotIDs, và nó sẽ biến mất trong kết quả hoặc chỉ thay đổi thứ tự của các đối tượng trong gán obj2, obj1và kiểm tra kết quả.
Ori Drori

@OriDrori giải pháp là vấn đề là Câu hỏi cụ thể và đó không phải là giải pháp tốt nhất, tôi đồng ý.
Saurav

Tôi cũng sẽ thêm một giải pháp tốt hơn :)
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)


Đang đè của bạn obj1.slotIDsvới obj2.slotIDs, và không hợp nhất các mảng, và chỉ nhận được giá trị duy nhất. Thêm một id duy nhất khác vào obj1.slotIDs, và nó sẽ biến mất trong kết quả hoặc chỉ thay đổi thứ tự của các đối tượng trong gán obj2, obj1và kiểm tra kết quả.
Ori Drori

1

BIÊN TẬP:

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

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

console.log(result)


Câu trả lời cũ:

Thế còn { ...obj1, ...obj2 }.slotIDs?

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

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

console.log(result)


1
Wao, đó là một giải pháp đơn giản khác Cảm ơn :)
Mian Muhammad

0

Nếu đối tượng của bạn có thể có tính chất bổ sung mà giữ giá trị mảng và bạn muốn kết hợp tất cả các thành một mảng duy nhất mà bạn có thể sử dụng Object.entries()với .map()và sau đó một Setđể loại bỏ các bản sao:

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);

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.