Javascript 将具有相同属性的对象数组转换为具有数组值的对象

Javascript 将具有相同属性的对象数组转换为具有数组值的对象,javascript,arrays,object,Javascript,Arrays,Object,let数据=[ {姓:“约翰”,姓“多伊”}, {姓:“迈克”,姓:“史密斯”} ] console.log(数据)您可以使用它创建对象的新版本 reduce()方法对数组的每个成员执行一个reducer函数(由您提供),从而产生一个输出值 使用reduce,我们首先传入一个函数,该函数在每个项上执行并返回一个新的输出值,然后传入定义单个输出值初始结构的第二个参数 let数据=[ {姓:“约翰”,姓“多伊”}, {姓:“迈克”,姓:“史密斯”} ] //o=当前输出值 //i=数组中的当前项

let数据=[
{姓:“约翰”,姓“多伊”},
{姓:“迈克”,姓:“史密斯”}
]
console.log(数据)
您可以使用它创建对象的新版本

reduce()方法对数组的每个成员执行一个reducer函数(由您提供),从而产生一个输出值

使用reduce,我们首先传入一个函数,该函数在每个项上执行并返回一个新的输出值,然后传入定义单个输出值初始结构的第二个参数

let数据=[
{姓:“约翰”,姓“多伊”},
{姓:“迈克”,姓:“史密斯”}
]
//o=当前输出值
//i=数组中的当前项
让结果=数据。减少((o,i)=>{
//将名字/姓氏添加到相应的数组中
o、 firstName.push(即firstName)
o、 lastName.push(即lastName)
//返回新的当前输出值
返回o
},{firstName:[],lastName:[]}//设置初始输出值
log(result)
带有方法的通用解决方案

let数据=[{
名字:“约翰”,
姓:“Doe”
},
{
名字:“迈克”,
姓:“史密斯”
}
]
让结果=数据。减少((obj,o)=>{
对象。键(o)
.forEach(k=>{
obj[k]=obj[k]| |[];
obj[k].推(o[k]);
})
返回obj;
}, {})

console.log(result)
您还可以使逻辑更通用,而不考虑已知的属性

let数据=[{
名字:“约翰”,
姓:“Doe”
},
{
名字:“迈克”,
姓:“史密斯”
}
]
让结果=数据。减少((o,i)=>{
用于(常量键输入i){
如果(!o[key]){
o[键]=[];
}
o[key].按(i[key]);
}
返回o
}, {})
console.log(结果)
let数据=[
{姓:“约翰”,姓“多伊”},
{姓:“迈克”,姓:“史密斯”}
]
var firstName=[];var lastName=[];
data.forEach(功能(项){
firstName.push(item.firstName);
lastName.push(item.lastName);
})
设obj={};
obj.firstName=firstName;
obj.lastName=lastName;
让dataModified=[];
数据修改推送(obj);

console.log(dataModified)我们可以做的另一件简单的事情是叫两次,一次叫名字,一次叫姓氏

let数据=[
{姓:“约翰”,姓“多伊”},
{姓:“迈克”,姓:“史密斯”}
]
让结果={
firstName:data.map(i=>i.firstName),
lastName:data.map(i=>i.lastName)
}

console.log(result)
这里有一个单一的迭代、功能性、非变异的解决方案:

let数据=[
{姓:“约翰”,姓“多伊”},
{姓:“迈克”,姓:“史密斯”}
]
让result=data.reduce((res,{firstName,lastName})=>({
firstName:[firstName,…res.firstName],
lastName:[lastName,…res.lastName]
}),{firstName:[],lastName:[]})
console.log(结果)
let result = data.reduce((obj, o) => {
  // get all keys of object
  Object.keys(o)
    // iterate over the keys
    .forEach(k => {
      // define property if not defined
      obj[k] = obj[k] || [];
      // push the value to the array
      obj[k].push(o[k]);
    })
  // return object
  return obj;
  // set initial value as an object for result
}, {})