0

我已转换以下 CSV 文件

Col1;Col2
1;b
2;d
2;e
3;e
2;zz

进入以下[ ][ ] (关联数组)

[
  ["Col1","Col2"],
  ["1","b"],
  ["2","d"],
  ["2","e"],
  ["3","g"],
  ["2","zz"]
]

另一种可能性是 CSV 行的数组,其中列使用扩展运算符映射到对象中,我从许多搜索中找到了 :)。这种方法自然会处理更多的列。

[
{0:"Col1", 1:"Col2"},
{0:"1", 1:"b"},
{0:"2", 1:"d"},
...
{0:"2", 1:"zz"},
]

但是,我想让 JSON “分层”并处理重复的字段值,这里从左列“Col1”开始,以便派生以下 JSON

{
"1":["b"],
"2":["d","e","zz"],
"3":["g"]
}

你会怎么做呢?

当然,我们可以将问题概括为 n 列数据,其中我们可以有几列具有重复值(从左到右)。

我的大多数搜索似乎都针对重复数据删除,这不是我的情况,我想排除重复字段,如图所示。我可以想象一个迭代方法,但我希望有人有一个 .map() 也许?紧凑/优雅的方法。

谢谢你。

4

1 回答 1

1

const initArray = [
  { 0: 'Col1', 1: 'Col2' },
  { 0: '1', 1: 'b' },
  { 0: '2', 1: 'd' },
  ...{ 0: '2', 1: 'zz' },
];

肯定有一种更清洁的方法来做这件事reduce,但我会先map介绍一下做这件事的方法。

  1. const desiredKeys = initArray.map(element => element["0"]),这将为您提供一个数组,其中每个所需的键作为元素,即["1","2",...,"2"]
  2. desiredKeysNoDuplicates = [...new Set(desiredKeys)]删除重复项,所以我们会有类似的东西["1","2"]
  3. desiredKeysNoDuplicates.map(element => initArray.map(originalElement => originalElement["0"] === element ? originalElement["1"]: undefined))将获取键并在原始数组中查找哪些元素具有匹配的键并从键中返回它们的值1
于 2020-05-04T06:14:48.847 回答