gpt4 book ai didi

javascript - js对象之间的区别

转载 作者:行者123 更新时间:2023-11-28 05:33:35 26 4
gpt4 key购买 nike

我遇到了以下问题,我正在寻找一种真正有效的方法来做到这一点。

我有两个 Javascript 对象总是像 {id:data,id:data,..} 一样构建

如果我只查看按键,它们将如下所示:

B = ["1","2","3"]
A = ["2","3","4"]

现在我需要我需要做什么的信息,将 B 转换为 A,因此在本例中:删除 B.1 和 B.4 = A.4 。

我在想,也许对象的原型(prototype)函数是一个很好的方法来做到这一点。

这是我到目前为止所拥有的:

Array.prototype.diff = function(a) {
return this.filter(function(i) {return a.indexOf(i) < 0;});
};
Object.prototype.syncTo = function(b,callbackA,callbackB){
var a = this;
var bKeys = Object.keys(b);
var aKeys = Object.keys(a);

var toremove = bKeys.diff(aKeys);
var toadd = aKeys.diff(bKeys);

for(var i = 0; i < toremove.length; i++) {
if(b.hasOwnProperty(toremove[i])) {
delete b[toremove[i]];
}
}
callbackB(b);
for(var i = 0; i < toadd.length; i++) {

if(a.hasOwnProperty(toadd[i])){
<<Dont know how to go on now>>
}
}
callbackA(XXXXXX);
};

其中应使用必须添加到 B 的所有元素调用 CallbackA,并应使用需要从 B 中删除的所有元素调用 CallbackB。

我正在努力研究回调A的元素,以及总的来说这是否是一种有效的方法。

感谢您的支持!

编辑:回调之一的示例是:

回调B:

    function (items){ 
for(var i in items){
items[i].removeSomeWhereElse();
}
}

最佳答案

如果你搜索 NPM,有几个库可以做到这一点,作为一个无耻的插件,我只提一下我编写的一个可以区分任何对象的库,包括数组插入/删除/移动:

https://github.com/benjamine/jsondiffpatch

这是根据需要比较 2 个数组的演示页面:

http://benjamine.github.io/jsondiffpatch/demo/index.html?desc=moving%20around&left=%5B0%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%5D&right=%5B10%2C0%2C1%2C7%2C2%2C4%2C5%2C6%2C88%2C9%2C3%5D

您可以看到删除、添加,甚至移动(如果需要,可以通过配置禁用移动检测)

使用库将更有效地节省您的时间,现在如果您想节省 CPU 周期,您可以使用 LCS 的简单实现(这是解决您所描述的问题的标准算法) ,参见:https://en.wikipedia.org/wiki/Longest_common_subsequence_problem

jsondiffpatch 包含该内容(对于 js),您可以从这里窃取它:https://github.com/benjamine/jsondiffpatch/blob/master/src/filters/lcs.js

关于javascript - js对象之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39525942/

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