gpt4 book ai didi

javascript - 确定对象集合是否已更改的最有效方法是什么?

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

我之前从后端获取了一个集合。我正在轮询后端更改并收到另一个集合。数据集的大小合理,因此我们不需要任何优化...只需重新获取整个数据即可。

通过算法运行两个数据集 f(previousCollection, newCollection) ,我想为 added 生成结果, removed , 和 modified .

最有效的方法是什么?或者,更确切地说,你们在日常工作中是如何做到这一点的?

示例数据:

旧的:

{id: 1, foo: 'bar'},
{id: 2, foo: 'bar'}

新:

{id: 2, foo: 'quux'},
{id: 4, foo: 'bar'}

预期结果:

{event: 'removed', id: 1},
{event: 'modified', id: 2},
{event: 'added', id: 4}

最佳答案

使用 Array#reduce 和 Array#find 使这变得非常简单

    function f(prev, curr) {
var result = prev.reduce(function(result, p) {
var c = curr.find(function(item) {
return item.id == p.id;
});
if(c) {
if(c.foo !== p.foo) {
result.push({event: 'modified', id:p.id});
}
} else {
result.push({event: 'removed', id:p.id});
}
return result;
}, []);
return curr.reduce(function(result, c) {
var p = prev.find(function(item) {
return item.id == c.id;
});
if(!p) {
result.push({event: 'added', id:c.id});
}
return result;
}, result);
}
var old = [
{id: 1, foo: 'bar'},
{id: 2, foo: 'bar'}
];

var curr = [
{id: 2, foo: 'quux'},
{id: 4, foo: 'bar'}
];
console.log(f(old, curr));

开玩笑,这个例子是用 ES2015+ 写的,使用箭头函数,对象速记和对象解构

var f = (previousCollection, newCollection) => newCollection.reduce((result, {id}) => {
if (!previousCollection.find(item => item.id == id)) {
result.push({event: 'added', id});
}
return result;
}, previousCollection.reduce((result, {id, foo}) => {
var {foo:newValue} = newCollection.find(item => item.id == id) || {};
if (newValue) {
if(newValue !== foo) {
result.push({event: 'modified', id});
}
} else {
result.push({event: 'removed', id});
}
return result;
}, []));

var old = [
{id: 1, foo: 'bar'},
{id: 2, foo: 'bar'}
];

var curr = [
{id: 2, foo: 'quux'},
{id: 4, foo: 'bar'}
];
console.log(f(old, curr));

关于javascript - 确定对象集合是否已更改的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42464838/

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