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

标签 javascript

我有这个数组:

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

关于javascript - 如何基于另一个对象数组创建一个对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43232612/

相关文章:

javascript - 捕获 "open link in new tab"和 "Open link in new window"事件

javascript - jQuery 可调整大小 : don't allow contained div to be out

javascript - 用 `this` 设置 `apply()` 的值

javascript - 必需的关键字不适用于 Angular

javascript - 仅将 CSS 类添加到那些没有 'title' 属性的链接

Javascript:点击状态栏时禁用 iOS 滚动到顶部

c# - 将每个用户输入处理为纯文本

javascript - Angularfire2 错误 "Property ' downloadURL 在类型 'AngularFireUploadTask' 上不存在。”

javascript - 更改在 IE 11 中不起作用的 DIV 的旋转速度,使用 JS 更新 CSS 动画属性

javascript - 从 .js 文件运行函数而不导入它?