【问题标题】:How to split 1D array in to arrays based on multiple keys - Javascript?如何将一维数组拆分为基于多个键的数组 - Javascript?
【发布时间】:2021-11-03 09:58:56
【问题描述】:

我有一个像这样的一维数组,其中该数组中的单个对象看起来像这样

[
  {
    date: "01/01/2020",
    type1: 264,
    type2: 1937,
    type3: 30
  },
  ...
]

我想修改上面的数组,把它转换成下面格式的二维数组

[
  [
    {
      "date": "01/01/2020",
      "type": "type1",
      "value": 264
    },
    {
      "date": "01/01/2020",
      "type": "type2",
      "value": 1937
    }
    .....
  ],
  [
    {
      "date": "01/01/2020",
      "type": "type3",
      "value": 30
    }
    .....
  ]
]

基本上第一个数组将由 type1 和 type2 值组成,第二个数组将由 type3 值组成。

我对 javascript 很陌生。我已经尝试过使用下面的普通 javascript

const type1 = data.map((e: any) => ({
  date: e.date,
  type: "type1",
  value: e.type1
}));

const type2 = data.map((e: any) => ({
  date: e.date,
  type: "type2",
  value: e.type2
}));

const type3 = data.map((e: any) => ({
  date: e.date,
  type: "type3",
  value: e.type3
}));

const newData = [type1.concat(type2), type3];

有没有更好的办法?

【问题讨论】:

  • 您的硬编码解决方案清晰易读,所以我会坚持下去。如果您将来需要更动态的解决方案,您可以重构。将清晰置于聪明之上。

标签: javascript arrays multidimensional-array lodash


【解决方案1】:

作为第一步,将对象转换为拆分对象的一种方法是指定属性名称(这是假设没有更多未知属性):

const arr = [{date:'01/01/2020', type1:264,type2: 1937,type3:30}];

const res = _.flatMap(arr,o=> ['type1','type2','type3'].map(t=> ({date:o.date, type:t, value:o[t]})));

console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>

但在那之后,我不确定目标,如果您希望将所有类型 3 的对象放在一个单独的数组中,而不管源对象如何,一种快速而肮脏的方法可能是:

const arr = [{date:'01/01/2020', type1:264,type2: 1937,type3:30}];

const res = [[],[]];
  _.flatMap(arr,o=> ['type1','type2','type3'].map(t=> ({date:o.date, type:t, value:o[t]})))
  .forEach(o=> res[o.type==='type3' ? 1: 0].push(o));

console.log(res);
  <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>

【讨论】:

  • 您好,我想要第一个数组中的 type1 和 type2 以及第二个数组中的 type3
  • 嗨,它们在这篇文章的底部示例中。 (第一个例子是关于创建单独的对象,第二个例子是关于数组中的分组)。那是你追求的格式吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 2022-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多