2013-02-12 87 views
1

extra中的值混合到arr中生成result而不以任何方式修改arr的最有效方法是什麼? 使用:普通JavaScript,下劃線,lodash(下劃線compat),jQuery或lodash,按照偏好。將對象屬性混合到對象數組中

arr = [ 
    {name: "A"}, 
    {name: "B"}, 
    {name: "C"}, 
] 

extra = { 
    "B": value1 
    "C": value2 
} 

result == [ 
    {name: "A"}, 
    {name: "B", extra: value1}, 
    {name: "C", extra: value2}, 
] 
// true ! 

回答

2
for (var x = 0; x < arr.length; x++) { 
    if (arr[x].hasOwnProperty('name')) { 
     if (extra.hasOwnProperty(arr[x].name)) { 
      arr[x].extra = extra[arr[x].name]; 
     } 
    } 
} 

hasOwnProperty可能是矯枉過正。

http://jsfiddle.net/Y3Abe/2/

+1

我是同一事物的中間,所以我在這裏加了我的jsfiddle和固定的一對夫婦失蹤')'的。 – 2013-02-12 00:52:34

+0

在這個解決方案中'arr'中的對象被修改。有沒有辦法做到這一點,而不是使用'arr'的深層克隆? – johowie 2013-02-12 01:49:46

+0

@johowie你可以預先在對象上使用'_.clone' – 2013-02-12 01:51:46