首页 > 解决方案 > 如何在 JavaScript 中将对象数组中的列值与字符串值组合成单个对象

问题描述

我有一个数组,它有不止一行(它可以变化),如下所示。

const myArray = [{
    name: 'user 100', name2: 'user200', name3: 'user300',
}, {
    name: 'user 101', name2: 'user201', name3: 'user301',
}, {
    name: 'user 102', name2: 'user202', name3: 'user302',
}];

我想将所有这些行合并/合并为 1,如下所示:

{
    name: 'user 100 user 101 user 102',
    name2: 'user200 user 201 user 203',
    name3: 'user300 user 301 user 303',
}

标签: javascriptarraysalgorithmobjectreduce

解决方案


您可以使用Array.prototype.forEach()and来做到这一点Object.entries()

const arr = [{
  name: 'user 100', name2: 'user200', name3: 'user300',
}, {
  name: 'user 101', name2: 'user201', name3: 'user301',
}, {
  name: 'user 102', name2: 'user202', name3: 'user302',
}];

const result = {};

arr.forEach((item, index) => {
  Object.entries(item).map(([key, value]) => {
    result[key] = `${ (result[key] || '')  } ${ value }`;
  });
});

console.log(result);

可以使用Array.prototype.reduce()代替来完成相同的操作Array.prototype.forEach()

const arr = [{
  name: 'user 100', name2: 'user200', name3: 'user300',
}, {
  name: 'user 101', name2: 'user201', name3: 'user301',
}, {
  name: 'user 102', name2: 'user202', name3: 'user302',
}];

const combined = arr.reduce((result, item) => {
  Object.entries(item).map(([key, value]) => {
    result[key] = `${ (result[key] || '')  } ${ value }`;
  });
  
  return result;
}, {});

console.log(combined);


推荐阅读