繁体   English   中英

如何基于另一个对象数组创建一个对象数组?

[英]how to create an array of objects based on another array of objects?

我有这个数组:

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]});
}

它需要调整,想法?

使用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.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);

根据您的编辑:

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

 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);

尝试这个

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

我想这就是你想要的

您可以将解构的所需属性映射到新对象。

 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);

如果它是一个对象数组

var arr1=[{},{},..]

你必须遍历对象属性,所以你需要这个

var arr2 =[]



 arr1.forEach(element => {
      var temp = new Object();
      for (var name in element) {
        temp[name] = element[name]
      }
      arr2 .push(temp)
    });

现在你有 arr2 作为不同于 arr1 的另一个对象

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM