2017-03-22 192 views
1

如何将一个额外的键值对添加到下列数组中的每个元素。修改一个字典数组,在每个元素中添加一个元素

get_project_list.completed = [{"user":"xyz","email":"[email protected]"}] 
for (var i in get_project_list.completed) { 
    i['status'] = "completed"; 
} 

O/P [{"user":"xyz","email":"[email protected]","status":"completed"}]

应该有一个简单的解决方案,这一点,但没能找到它的工作。

任何帮助表示赞赏。

回答

1

请勿对数组使用for in循环,因为它遍历每个可枚举的属性。

例如,我在这里给数组添加一个新的属性,这个属性是可枚举的,并且在for in循环中我也获得了它。

var arr = [{"user":"xyz","email":"[email protected]"}]; 
 
Object.defineProperty(arr, 'custom', { value: 'myCustom', enumerable: true }); 
 

 
for(let prop in arr){ 
 
    console.log(prop); 
 
}

如果您正在使用ES6你能做到通过

1)forEach功能

var arr = [{"user":"xyz","email":"[email protected]"}]; 
 

 
arr.forEach(item => item['status'] = 'completed'); 
 

 
console.log(arr);

2)for of

var arr = [{"user":"xyz","email":"[email protected]"}]; 
 
    
 
for(let item of arr){ 
 
    item['status'] = 'completed'; 
 
} 
 

 
console.log(arr);

随着ES5,您可以使用简单for loop

var arr = [{"user":"xyz","email":"[email protected]"}]; 
 

 
for(var i = 0; i < arr.length; i++){ 
 
    arr[i]['status'] = 'completed'; // get the current index-th item 
 
} 
 

 
console.log(arr);

1

您在for循环中获取索引并需要将其与数组一起使用。

get_project_list.completed[i]['status'] = "completed"; 
// ^^^^^^^^^^^^^^^^^^^^^^^^^^ 

var get_project_list = { completed: [{"user":"xyz","email":"[email protected]"}] }, 
 
    i; 
 
    
 
for (i in get_project_list.completed) { 
 
    get_project_list.completed[i]['status'] = "completed"; 
 
} 
 
    
 
console.log(get_project_list);

对于数组,我建议使用一个for循环使用一个计数器,因为你得到所有枚举的属性和顺序是不能保证。

var get_project_list = { completed: [{"user":"xyz","email":"[email protected]"}] }, 
 
    i; 
 
    
 
for (i = 0; i <get_project_list.completed.length; i++) { 
 
    get_project_list.completed[i]['status'] = "completed"; 
 
} 
 
    
 
console.log(get_project_list);

1

如果你transpiling(例如用巴贝尔),我建议使用map功能结合对象传播操盘手。

let newList = get_project_list.completed.map(i => 
    {... i, status : "completed" } 
) 

这样,您不必改变旧的数组。

相关问题