2017-04-24 98 views
0

的阵列的例子将自己说话:对象操作的javascript,添加对象的值到对象

[{ 
    userId: 'ab4e3870-287e-11e7-b5a1-abb6183e9866', 
    email: '[email protected]' 
},{ 
    userId: 'ae149220-2883-11e7-bbf9-1fb134f2b4ad', 
    email: '[email protected]' 
}] 

对象

{ 
    'ab4e3870-287e-11e7-b5a1-abb6183e9866': { name: 'john', roles: 'detective'}, 
    'ae149220-2883-11e7-bbf9-1fb134f2b4ad': { name: 'james', roles: 'plumber'}, 
} 

结果我”:

对象的阵列d like would将是:

[{ 
    userId: 'ab4e3870-287e-11e7-b5a1-abb6183e9866', 
    email: '[email protected]', 
    name: 'john', 
    roles: 'detective' 
},{ 
    userId: 'ae149220-2883-11e7-bbf9-1fb134f2b4ad', 
    email: '[email protected]', 
    name: 'james', 
    roles: 'plumber' 
}] 

因此,基本上,与对象中的userId匹配的键的值被添加到该数组中的该对象。

有没有一些简单的方法,我不明白这样做? ES6中没有外部库?

+0

当然,只是通过阵列和所述对象键进行迭代,并检查数组对象是否具有一个userId等于另一个对象的键 – Isaac

回答

1
var data = [{ 
    userId: 'ab4e3870-287e-11e7-b5a1-abb6183e9866', 
    email: '[email protected]' 
},{ 
    userId: 'ae149220-2883-11e7-bbf9-1fb134f2b4ad', 
    email: '[email protected]' 
}] 

var d = { 
    'ab4e3870-287e-11e7-b5a1-abb6183e9866': { name: 'john', roles: 'detective'}, 
    'ae149220-2883-11e7-bbf9-1fb134f2b4ad': { name: 'james', roles: 'plumber'}, 
}; 

使用ES6传播算子...

data = data.map(function(item) { 
    return {...item, ...d[item.userId]} 
}); 

ES5:通过添加属性中手动

data = data.map(function(item) { 
    item.name = d[item.userId].name; 
    item.roles = d[item.userId].roles; 
    return item; 
});