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

基于属性匹配两个单独的Javascript对象,javascript,javascript-objects,Javascript,Javascript Objects,对于对象有一个相当复杂的用例,我很好奇这样做的正确方法是什么 请参见此处的示例代码: 基本上,我有一个单独的对象(var对象),其中有多个对象。然后我有一个对象数组(var returnedData),其条目是对象。我基本上希望通过name属性将returnedData内的对象与正确的对象(var对象内)匹配,然后将其作为单独的属性添加到该对象中 数据的理想状态如下所示: people: { p1: { name: "richard",

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

请参见此处的示例代码:

基本上,我有一个单独的对象(var对象),其中有多个对象。然后我有一个对象数组(var returnedData),其条目是对象。我基本上希望通过name属性将returnedData内的对象与正确的对象(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"       
            }
        }
    }
就能够处理这么多嵌套对象而言,我还没有看到太多文档和问题。我甚至不知道如何解决这个问题,所以任何建议都非常感谢

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


提前谢谢

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

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

顶层“For In”用于上层“signups,nonsignups”,嵌套的“For In”用于遍历人。在为对象属性使用变量时,需要使用括号表示法

JSFIDDLE:

JS:

for(变量i=0;i

让我知道这是否有帮助。

看着你的小提琴,我会遍历数组,检查returnedData对象名称是否与注册或非注册中的任何名称匹配,并在需要时追加。你是否需要帮助来写这个,或者你是在问是否有比我刚才描述的更好的方法?我知道我可以循环数组并从数组中的对象获取名称…但是我如何写匹配的部分呢?在数组中循环时,是否最好同时追加数据?我也不知道如何根据注册和非注册对象中的对象的“name”属性进行匹配。我不知道[keys]可以以这种方式多次使用(如何将第二个版本作为propname)。这太棒了。谢谢你的解释。如果我能投两次票,我会的!没问题,很高兴我能帮忙。
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