2017-04-05 184 views
4

我有这个数组:如何基于另一个对象数组创建一个对象数组?

var arr1 = [ 
{"user":"dan","liked":"yes","age":"22"}, 
{"user":"sarah","liked":"no","age":"21"}, 
{"user":"john","liked":"yes","age":"23"}, 
]; 

我想创建数组的新(子)阵列,只包含用户的喜欢。

所以它看起来像这样:

var arr2 = [ 
{"dan":"yes"}, 
{"sarah":"no"}, 
{"john":"yes"}, 
]; 

我想:

var arr2 =[]; 
for(var i in arr1){ 
    arr2.push({[i[user]]:i[liked]}); 
} 

它需要一个调整, 想法?

回答

9

使用array.map

var arr1 = [ 
 
{"user":"dan","liked":"yes","age":"22"}, 
 
{"user":"sarah","liked":"no","age":"21"}, 
 
{"user":"john","liked":"yes","age":"23"}, 
 
]; 
 

 
var arr2 = arr1.map(v => ({ user: v.user, liked: v.liked })); 
 

 
console.log(arr2);

有了您的更新,但它可以与array.map做,我建议你使用一个键值对结构,而不是。你需要array.reduce

var arr1 = [ 
 
    {"user":"dan","liked":"yes","age":"22"}, 
 
    {"user":"sarah","liked":"no","age":"21"}, 
 
    {"user":"john","liked":"yes","age":"23"}, 
 
    ]; 
 

 
    var arr2 = arr1.reduce((c, v) => (c[v.user] = v.liked, c) , {}); 
 

 
    console.log(arr2);

+0

我在我的问题犯了一个错误!编辑!对不起 – Ted

2

根据您的编辑:

arr1 = arr1.map(function(item){ 
 
    return{ 
 
    [item.user]: item.liked 
 
    } 
 
});

0

您可以映射解构希望属性的新对象。

var array1 = [{ user: "dan", liked: "yes", age: "22" }, { user: "sarah", liked: "no", age: "21" }, { user: "john", liked: "yes", age: "23" }], 
 
    array2 = array1.map(({ user, liked }) => ({ [user]: liked })); 
 

 
console.log(array2);

ES5

var array1 = [{ user: "dan", liked: "yes", age: "22" }, { user: "sarah", liked: "no", age: "21" }, { user: "john", liked: "yes", age: "23" }], 
 
    array2 = array1.map(function (o) { 
 
     var temp = {}; 
 
     temp[o.user] = o.liked; 
 
     return temp; 
 
    }); 
 

 
console.log(array2);

1

试试这个

var arr2 =[]; 
for(var i in arr1){ 
    var obj= {}; 
    obj[arr1[i]['user']] = arr1[i]['liked']; 
    arr2.push(obj) 
} 
2

var arr1 = [ 
 
{"user":"dan","liked":"yes","age":"22"}, 
 
{"user":"sarah","liked":"no","age":"21"}, 
 
{"user":"john","liked":"yes","age":"23"}, 
 
]; 
 

 
var res = arr1.map(function(o) { 
 
    var r = {}; 
 
    r[o.user] = o.liked; 
 
    return r; 
 
}); 
 

 
console.log(res);

或者在最近的ECMAScript版本:

var arr1 = [ 
 
{"user":"dan","liked":"yes","age":"22"}, 
 
{"user":"sarah","liked":"no","age":"21"}, 
 
{"user":"john","liked":"yes","age":"23"}, 
 
]; 
 

 
var res = arr1.map(o => ({ [o.user]: o.liked })); 
 

 
console.log(res);

1
var arr2=[]; 
arr1.forEach(function(obj) 
{ 
    var temp=new Object(); 
    temp[obj.user]=obj.liked; 
    arr2.push(temp); 
}); 

我想这是你想要的

相关问题