在JavaScript中将几个数组组合成一个对象数组

假设我有三个数组,描述了一些名称,阅读的书籍数量以及这些人[名字]中有多棒:
let names = ["Mary","Joe","Kenan"];
let numberOfBooks = [2,1,4];
let awesomenessLevel = ["pretty cool","meh","super-reader"];

我正在尝试使用.reduce()将它们组合在一起以创建一个包含每个数组中相关索引的对象数组,但我失败了:

let people = [
    {
       name: "Mary",noOfBooks: 2,awesomeness: "pretty cool"
    },{
       name: "Joe",noOfBooks: 1,awesomeness: "meh"
    },{
       name: "Kenan",noOfBooks: 4,awesomeness: "super-reader"
    }
  ]

我也减少了它:

let arrFinal = [];

 names.reduce(function(all,item,index) {
  arrFinal.push({
    name: item,noOfBooks: numberOfBooks[index],awesomeness: awesomenessLevel[index]
  })
},[]);

解决方法

你可以用map来做,像这样:
let result = names.map( (v,i) => ({
    name: names[i],noOfBooks: numberOfBooks[i],awesomenessLevel: awesomenessLevel[i]
}));
let names = ["Mary","super-reader"];

let result = names.map( (v,awesomenessLevel: awesomenessLevel[i]
}));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

在这种情况下,map比reduce更好,因为names数组中的元素数量(或其他两个元素中的任何一个)与输出中所需的元素数量相同.在这种情况下,使用地图更自然.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...