做一个;“差别”;在javascript/jQuery中的关联数组上?
如果我有两个关联数组,对它们的值进行差异计算的最有效方法是什么 例如,假设:做一个;“差别”;在javascript/jQuery中的关联数组上?,javascript,jquery,arrays,loops,associative-array,Javascript,Jquery,Arrays,Loops,Associative Array,如果我有两个关联数组,对它们的值进行差异计算的最有效方法是什么 例如,假设: array1 = { foreground: 'red', shape: 'circle', background: 'yellow' }; array2 = { foreground: 'red', shape: 'square', angle: '90', background: 'yellow' }; 如何将一个项目与另一个项目进行检查,
array1 = {
foreground: 'red',
shape: 'circle',
background: 'yellow'
};
array2 = {
foreground: 'red',
shape: 'square',
angle: '90',
background: 'yellow'
};
如何将一个项目与另一个项目进行检查,以使缺少的或附加项目成为结果数组。在本例中,如果我想在array2中比较array1,它将返回:
array3 = {shape: 'circle'}
array3 = {shape: 'square', angle: '90'}
如果我将array2与array1进行比较,结果会是:
array3 = {shape: 'circle'}
array3 = {shape: 'square', angle: '90'}
提前感谢您的帮助 试试这个:
function diff(obj1, obj2) {
var result = {};
$.each(obj1, function (key, value) {
if (!obj2.hasOwnProperty(key) || obj2[key] !== obj1[key]) {
result[key] = value;
}
});
return result;
}
如果您熟悉PHP语法,请查看其中包含几乎所有转换为JavaScript的PHP数组相关函数的部分–包括RaYell的解决方案很好,但不幸的是,如果我们需要了解两者的两面,它只会告诉您obj2中与obj1不同或不存在的项,让我们把所有的钥匙都拿出来,然后比较一下。以下函数将返回一个关联数组,其中包含每个对象的键值。哦公平地说,我还没有测试过,但这应该可以
var diff = function(obj1,obj2) {
var newObj = $.extend({},obj1,obj2);
var result = {};
$.each(newObj, function (key, value) {
if (!obj2.hasOwnProperty(key) || !obj1.hasOwnProperty(key) || obj2[key] !== obj1[key]) {
result[key] = [obj1[key],obj2[key]];
}
});
return result;
}
哦,虽然我确实认识到第一个解决方案回答了最初的问题,但我认为上面的解决方案提供了另一种方法,最初的用户可能会发现它很有用,因此不需要检查两次。这可能比您需要的要复杂得多,但您可以尝试我的jsondiffpatch库,它将区分任何一对javascript对象: 如果您想测试它,您可以在minha ficou assim中看到它:
function diff(obj1, obj2){
var result = {};
for(var key1 in obj1){
let resposta = {
before : obj1[key1] ? obj1[key1] : '',
after : obj2[key1] ? obj2[key1] : ''
};
if(resposta.before !== resposta.after){
result[key1] = resposta;
}
}
for(var key2 in obj2){
if(!(key2 in result) || (key2 in obj1)){
let resposta = {
before : obj1[key2] ? obj1[key2] : '',
after : obj2[key2] ? obj2[key2] : ''
}
if(resposta.before !== resposta.after){
result[key2] = resposta;
}
}
}
return (Object.assign({}, result));
}