基于属性匹配两个单独的Javascript对象

时间:2014-11-10 23:11:11

标签: javascript javascript-objects

对象有一个非常复杂的用例,我很好奇这样做的正确方法是什么。

请在此处查看示例代码:http://jsfiddle.net/upp3px3y/1/

基本上,我有一个对象(var对象),里面有多个对象。然后我有一个对象数组(var returnedData),其条目是对象。我基本上想要将对象内部的对象,通过name属性匹配到正确的对象(在var对象内),然后将其作为单独的属性添加到该对象...

数据的理想状态如下:

    people: {
        p1: {
            name: "richard",
            nationality: "USA",
            data: {
                 name: "richard",
                 number: "11111",
                 city: "new york"       
            }
        },
        p2: {
            name: "chris",
            nationality: "USA",
            data: {
                 name: "chris",
                 number: "11111",
                 city: "new york"       
            }
        }
    }

我还没有看到很多关于SO的文档和问题,只要能够处理这么多嵌套对象。我甚至不确定如何处理这个问题,因此非常感谢任何建议。

我觉得答案可能与使用Object.keys(obj)有关,但我不确定在另一个对象中遍历对象的最佳方法是什么。

提前致谢!

1 个答案:

答案 0 :(得分:1)

我会遍历数组,并尝试将每个索引对象的名称与obj的嵌套对象之一进行匹配。这是我为你写的一个例子。

注意:我将var对象重命名为" obj",因为它太容易匹配Object。

顶级"对于In"适用于上层"注册,非注册"嵌套" For In"是为了穿越人。在对象属性中使用变量时,需要使用括号表示法。

JSFIDDLE:http://jsfiddle.net/biz79/upp3px3y/5/

JS:

for ( var i = 0; i< returnedData.length; i++) {

    for ( var keys in obj ) {
      if ( obj.hasOwnProperty(keys) ) {    
        for (var propname in obj[keys].people) { 
          if (obj[keys].people.hasOwnProperty(propname)) { 

            if ( obj[keys].people[propname].name === returnedData[i].name ) {

                // when you find a match, add 'data' property and append data object.
                obj[keys].people[propname].data = returnedData[i];
            }

          } 
        } // end for-in
      }
    }  // end for-in
}  // end for

如果有帮助,请告诉我。