【发布时间】:2018-03-31 14:19:15
【问题描述】:
所以我有这种情况,我有一个 client-app 将数据(对象数组)发送到 server,然后将数据转发到 other客户端 连接到此服务器。
在client-app中,数据是不断变化的,意思是:数值变化,数组里面的新对象弹出,对象被移除等等……
现在我希望其他客户始终收到最新数据。而且因为我不希望 client-app 只是将 全新数据 推送到服务器,然后服务器将 全新数据 转发到 其他客户端,我决定让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 属性可以充当标识符,但它不是键。
如果有人能指出在这两种情况下如何做(有和没有对象的特定键),我会很感激
【问题讨论】:
-
现在您的问题代码无效...
标签: javascript arrays merge javascript-objects array-difference