gpt4 book ai didi

javascript - 通过公共(public)对象键合并多个对象数组

转载 作者:行者123 更新时间:2023-11-30 15:56:28 24 4
gpt4 key购买 nike

我有一个问题,我希望 Stack Overflow 上的 JavaScript 好心人能帮我解决这个问题。

给定以下数组:

var array1 = [{address: "www.example.com", hits: 1}, {address: "www.anotherone.org", hits: 10}]
var array2 = [{address: "www.example.com", buttons: 1}, {address: "www.yetanotherone.info", buttons: 2}]
var array3 = [{address: "www.example.com", cons: 1}, {address: "andevenonemore.com", cons: 1}]

我想通过地址键合并这些数组,这在所有数组中都是通用的,但值可能不同。如果地址值不在数组中,则它应默认为 0。因此,结果数组应如下所示:

var resultArray = [{
address: "www.example.com",
hits: 1,
buttons: 1,
cons: 1
}, {
address: "www.anotherone.org",
hits: 1,
buttons: 0,
cons: 0
}, {
address: "www.yetanotherone.info",
hits: 0,
buttons: 2,
cons: 0
}, {
address: "andevenonemore.com",
hits: 0,
buttons: 0,
cons: 1
}]

合并将发生在服务器上,我有可能使用 Underscore.js。

我真的希望,比我聪明得多的人能给我一个有效的方法来解决这个问题。非常感谢您的帮助!

最佳答案

在纯 Javascript 中,您可以使用哈希表来引用单个地址项并计算所需的值。

var array1 = [{ address: "www.example.com", hits: 1 }, { address: "www.anotherone.org", hits: 10 }],
array2 = [{ address: "www.example.com", buttons: 1 }, { address: "www.yetanotherone.info", buttons: 2 }],
array3 = [{ address: "www.example.com", cons: 1 }, { address: "andevenonemore.com", cons: 1 }],
grouped = [];

[].concat(array1, array2, array3).forEach(function (a) {
if (!this[a.address]) {
this[a.address] = { address: a.address, hits: 0, buttons: 0, cons: 0 };
grouped.push(this[a.address]);
}
Object.keys(a).forEach(function (k) {
if (k !== 'address') {
this[a.address][k] += a[k];
}
}, this);

}, Object.create(null));

console.log(grouped);

关于javascript - 通过公共(public)对象键合并多个对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38451627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com