javascript - 将数组数组转换为组合在一起的对象数组

标签 javascript arrays object

我有一个数组数组。如何将它们转换为组合在一起的对象数组?

var abc = [
  ['apple', 'fruit'], ['banana', 'fruit'], ['grapes', 'fruit'], ['red', 'color'], ['blue', 'color'], ['black', 'color']
]


abc = abc.map(function(item) {
  return {
    value: item[0],
    color: item[1]
  }
})

colors = abc.filter(function(item) {
  return item.color === 'color'
})

fruits = abc.filter(function(item) {
  return item.color === 'fruit'
})

var result = [{
  group: 'color',
  value: colors.map(function(item) {
    return item.value
  })
}, {
  group: 'fruit',
  value: fruits.map(function(item) {
    return item.value
  })
}]

console.log(result)

我的预期输出是:

var abc = [
{
    group: 'color',
    value: ['red', 'blue', 'black']
},
{
    group: 'fruit',
    value: ['apple', 'banana', 'grapes']
}]

有没有更简单的方法来实现这一目标?

我也可以使用 lodash。请指教。

最佳答案

这是一种使用reducemap 的方法。 reduce 通过映射到值数组的 group 执行聚合。 Object.entries()map 将此分组转换为对象数组形式的所需格式。

var abc = [
  ['apple', 'fruit'],
  ['banana', 'fruit'],
  ['grapes', 'fruit'],
  ['red', 'color'],
  ['blue', 'color'],
  ['black', 'color']
];

const result = Object.entries(
    abc.reduce((a, e) => {
      if (!(e[1] in a)) {
        a[e[1]] = [];
      }

      a[e[1]].push(e[0]);
      return a;
    }, {})
  ).map(e => ({group: e[0], value: e[1]}))
;

console.log(result);

关于javascript - 将数组数组转换为组合在一起的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52653431/

相关文章:

javascript - Worker.onmessage 后的 angular2 变化检测未按预期工作

javascript - "with"带方括号表示法的范围和属性

arrays - 在 SQL Server 中将一列拆分为多列

PHP:使用 fetchall() 显示表数据

ios - 如果我的应用程序不支持 arm64 会怎样?

javascript - IFrame:在 Chrome 上运行 Iframe 但想要保留 IE 设置

javascript - 避免在分页时刷新页面 Laravel

Java程序跳过for循环

java - 为什么继续对不可变对象(immutable对象)使用 getter?

php - 使用对象中的元素添加到类的变量