gpt4 book ai didi

Javascript 数组和对象 : Get differences and merge them

转载 作者:行者123 更新时间:2023-11-30 09:30:07 25 4
gpt4 key购买 nike

所以我有这样的场景,我有一个 client-app 将数据(对象数组)发送到 server 然后将数据转发给 other连接到此服务器的客户端

client-app中,数据是不断变化的,意思是:值在变化,数组中的新对象弹出,对象被移除,等等......

现在我希望其他客户端总是收到最新的数据。而且因为我不希望客户端应用程序只是将全新数据推送到服务器,然后服务器将全新数据转发到< strong>其他客户端,我决定让 client-app 仅推送更改(使用此库:https://www.npmjs.com/package/deep-object-diff)。

其他客户端然后收到一个对象数组,其中只有实际改变的数据,因为他们知道以前的数据数组,我希望他们“合并”旧数据对象的变化数组。

我的实际问题是合并。我不知道如何正确地做到这一点。特别是如果我有一个对象数组,但没有任何对象键。

所以我的数据看起来像这样:

let data = [
{
name: 'Peter',
age: 26,
sID: 546589995544
},
{
name: 'John',
age: 33,
sID: 554589525469
}
];

实际上还有很多,但好吧,这就是结构。

如果 diff 库说,这就是更改:

let changes = {
{
age: 34,
sID: 554589525469
}
};

(请注意,我现在有一个对象的对象,而不是对象数组。这就是差异库返回的内容)

我希望合并后的对象是

[
{
name: 'Peter',
age: 26,
sID: 546589995544
},
{
name: 'John',
age: 34,
sID: 554589525469
}
];

(约翰现在大了一岁)

所以我完全相信,如果我有一个对象的键作为标识符,这会容易得多,但我仍然认为必须有一个解决方案来解决这个问题。如您所见,sID 属性可以用作标识符,但它不是键。

如果有人能指出在这两种情况下如何做到这一点(有和没有对象的特定键),我将不胜感激

最佳答案

您可以使用 .find() 来查找数组中应该更改值的对象,使用 Object.assign() 来设置值

let data = [{
name: 'Peter',
age: 26,
sID: 546589995544
},
{
name: 'John',
age: 33,
sID: 554589525469
}
];

let changes = [{
age: 34,
sID: 554589525469
}];

for (let prop of changes) {
let {sID} = prop;
Object.assign(data.find(({sID: id}) => id === sID), prop)
}

console.log(data);

关于Javascript 数组和对象 : Get differences and merge them,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46831676/

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