我有 2 个对象,其中一个作为另一个对象的副本开始。我希望能够检查不同的值是否已更改,即它们不再匹配:
var obj = {
key1: {
innerKey: "val"
},
key2: "matching val"
};
var copy = {
key1: {
innerKey: "non-matching val"
},
key2: "matching val"
};
我想要某种 hasChanged()
方法,其工作原理如下:
hasChanged(obj.key1.innerKey); // result true
hasChanged(obj.key2); // result false
似乎我需要某种方法来获取属性的“路径”或位置,以便在另一个对象上找到该属性进行比较,但我不确定如何去做。
谢谢
最佳答案
$.fn.hasChanged = function(obj,key){
var origObj = this[0];
var originalValue = Object.byString(origObj,key);
var currentValue = Object.byString(obj,key);
return !(originalValue == currentValue);
};
Object.byString = function(o, s) {
s = s.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
s = s.replace(/^\./, ''); // strip a leading dot
var a = s.split('.');
for (var i = 0, n = a.length; i < n; ++i) {
var k = a[i];
if (k in o) {
o = o[k];
} else {
return;
}
}
return o;
}
var obj = {
key1: {
innerKey: "val"
},
key2: "matching val"
};
var copy = {
key1: {
innerKey: "non matching val"
},
key2: "matching val"
};
alert($(obj).hasChanged(copy,'key1.innerKey'));
alert($(obj).hasChanged(copy,'key2'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
关于javascript - 如何访问另一个 JS 对象中匹配的对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31647900/