javascript - Cách so sánh 2 mảng và thêm khóa nếu không có
Giả sử tôi có hai mảng để so sánh:
var arrOriginal={currency1: 1234, currency2: 2345};
var arrToCompare={currency1: 123};
Tôi đang cố gắng tìm sự khác biệt giữa hai cái.
Kết quả ví dụ:
var result={currency1: 1111, currency2: 2345}
Những gì tôi đã thử: Sử dụng for .. in và sau đó trừ đi.
for (var key in this.arrOriginal) {
this.result.push({
currency: key,
amount: format.formatCurrency(this.arrToCompare[key] - this.arrOriginal[key])
});
}
Nhưng nó sẽ không hiển thị khóa tiền tệ mà mảng thứ hai không có.
Bất cứ sự giúp đỡ nào cũng được trân trọng.
Câu trả lời #1
Bạn có thể lấy giá trị mặc định là zero cho các thuộc tính undefined của đối tượng.
Từ bên trong ra bên ngoài:
- Lấy các mục từ đối tượng dưới dạng mảng các cặp khóa/giá trị.
- Ánh xạ các mục này và nhận một đối tượng với khóa và giá trị là hiệu của giá trị và giá trị tương ứng của đối tượng khác hoặc bằng không.
- Trải đối tượng ra dưới dạng các tham số cho
Object.assign. - Và lấy một đối tượng mới với tất cả các đối tượng từ ánh xạ.
var original = { currency1: 1234, currency2: 2345 },
deltas = { currency1: 123 },
result = Object.assign(
{},
...Object.entries(original).map(([k, v]) => ({ [k]: v - (deltas[k] || 0)}))
);
console.log(result);Câu trả lời #2
Một cách rất đơn giản là lặp qua các khóa của arrOriginal, nếu khóa đó có trong arrToCompare thì trừ đi giá trị đó, còn không thì không trừ.
var arrOriginal={currency1: 1234, currency2: 2345};
var arrToCompare={currency1: 123};
var out = {}
for(var key in arrOriginal){
out[key] = arrOriginal[key] - (arrToCompare[key] || 0)
}
console.log(out)