javascript - 如何访问另一个 JS 对象中匹配的对象属性

标签 javascript jquery object

我有 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/

相关文章:

java - 单击按钮时如何调用servlet

javascript - WSGI 与 python eve [Errno 32] 管道损坏... Ajax 调用

Java:可以访问由字符串连接创建的临时对象吗?

java - 为什么我们使用 "new"运算符创建一个对象,然后将其作为构造函数内的参数传递?

javascript - Firebase 存储可恢复在网络上上传大文件

javascript - 是否可以将事件移动到日期单元格的底部?

javascript - jquery函数在点击事件时重新加载页面

javascript - 如何向 Javascript 表添加一行,其中的单元格包含 jQuery 的 datepicker 函数?

javascript - 检查元素的特殊值

python - python中的最小堆