javascript - 如何在 JavaScript 中将嵌套数组转换为 'keyed' 数组?

标签 javascript arrays

我有一个如下所示的嵌套数组:

[[“组织”、“ID”、“名称”]、[“ACME”、“123456”、“巴特·辛普森”]、[“ACME”、“654321”、“内德·弗兰德斯”] ,[“ACME”,“1234”,“埃德娜·卡巴佩尔”],[“雅虎”,“666666”,“邦·斯科特”],[“雅虎”,“99999”,“尼尔·杨”],[“雅虎” ,“111111”,“仙妮亚·唐恩”]]

每个数组中的第一个值是 ID 和名称可以所属的组织的名称。

我正在尝试找到一种最简单的方法,将 ID 和名称属于同一公司的所有实例分组到一个“键”下。

所以上面的结果会是这样的:

{
   "ACME": [
      {
         "ID": 123456,
         "Name": "Bart Simpson"
      },
      {
         "ID": 654321,
         "Name": "Ned Flanders"
      },
      {
         "ID": 1234,
         "Name": "Edna Kabappel"
      }
   ],
   "Yahoogle": [
      {
         "ID": 666666,
         "Name": "Bon Scott"
      },
      {
         "ID": 99999,
         "Name": "Neil Young"
      },
      {
         "ID": 111111,
         "Name": "Shania Twain"
      }
   ]
}

我一直在玩 for 循环,但我最终得到了很多行代码,试图检测公司名称何时与以前的不同,并且陷入了真正的困惑。

我在这里进行了很多搜索,试图找到类似的东西,但没有任何运气。

大约 18 年后,我才刚刚出于个人兴趣再次开始编码,而且我又是新手了。

预先感谢您提供的任何帮助。

最佳答案

有很多解决方案可以达到相同的结果,其中一个使用 lambda 和 reduce:这是一个通用解决方案,只需调整输出推送即可构建最终的 json。

const datas = [
  ["Organisation", "ID", "Name"],
  ["ACME", "123456", "Bart Simpson"],
  ["ACME", "654321", "Ned Flanders"],
  ["ACME", "1234", "Edna Kabappel"],
  ["Yahoogle", "666666", "Bon Scott"],
  ["Yahoogle", "99999", "Neil Young"],
  ["Yahoogle", "111111", "Shania Twain"]
];

const titles = datas.shift()
const groupBy = (x,f)=>x.reduce((a,b)=>((a[f(b)]||=[])
                        .push({[titles[1]]:b[1], [titles[2]]:b[2]}),a),{});

const result = groupBy(datas, v => v[0])

console.log(result)

关于javascript - 如何在 JavaScript 中将嵌套数组转换为 'keyed' 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70184139/

相关文章:

javascript - 使用 JSON 值实现数组交集

javascript - findOne 抛出未定义,即使数据在那里

javascript - 制作一个 JavaScript 聊天机器人将聊天命令转换为另一个程序中的按键

arrays - 如何在 Fortran 中即时增加数组大小?

java - 调整巨大数组的大小

c++ - 检查尺寸值及其内容的功能

python - 返回给定 numpy 数组的探照灯向量

javascript - 如何在多选下拉列表中输出所有选定选项的文本而不使用php javascript提交

javascript - 有没有一种方法可以初始化一个保留初始 HTML 的 Vue 对象

javascript - Web Worker 中的 CSS 选择?