【问题标题】:How to make one array out of duplicate arrays and merge it?如何从重复数组中创建一个数组并将其合并?
【发布时间】:2021-08-24 11:06:06
【问题描述】:

myArra.js

[
  {
    "id": "61028558b45073399077becd",
    "slno": "A1",
    "checkPoint": "Position of adaptor CAT",
    "va": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      "YES",
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ]
  },
  {
    "id": "61028558b45073399077becd",
    "slno": "A1",
    "checkPoint": "Position of adaptor CAT",
    "va": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      "YES",
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ]
  },
  {
    "id": "61028558b45073399077becd",
    "slno": "A1",
    "checkPoint": "Position of adaptor CAT",
    "va": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      "YES",
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ]
  },
  {
    "id": "61028567b45073399077becf",
    "slno": "A2",
    "checkPoint": "Flush height of Adaptor CAT position",
    "va": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      "NO",
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ]
  },
  {
    "id": "61028572b45073399077bed1",
    "slno": "A3",
    "checkPoint": "Position of CAT bottom side",
    "va": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ]
  },
  {
    "id": "6102857fb45073399077bed3",
    "slno": "A4",
    "checkPoint": "Flush height of  CAT bottom side",
    "va": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ]
  },
  {
    "id": "6102858cb45073399077bed5",
    "slno": "B1",
    "checkPoint": "Position of Front cap pipe outer",
    "va": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ]
  }
]

在上面的代码中,我有一个对象数组,它有重复的元素。例如,它具有对象元素,例如 'slno'、'checkPoint' 和 'id' 是相同的。所以所有这些重复的对象应该只成为一个对象,而且每个对象中的元素“va”是一个数组,它在每个重复对象中都具有相同的长度。在这些重复的对象中,它也应该成为一个数组,如果数组有值,则应该填充空索引。 所以,结果应该类似于

结果

[
  {
    "id": "61028558b45073399077becd",
    "slno": "A1",
    "checkPoint": "Position of adaptor CAT",
    "va": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      "YES",
      null,
      null,
      "YES",
      "YES",
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ]
  },
  {
    "id": "61028567b45073399077becf",
    "slno": "A2",
    "checkPoint": "Flush height of Adaptor CAT position",
    "va": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      "NO",
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ]
  },
  {
    "id": "61028572b45073399077bed1",
    "slno": "A3",
    "checkPoint": "Position of CAT bottom side",
    "va": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ]
  },
  {
    "id": "6102857fb45073399077bed3",
    "slno": "A4",
    "checkPoint": "Flush height of  CAT bottom side",
    "va": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ]
  },
  {
    "id": "6102858cb45073399077bed5",
    "slno": "B1",
    "checkPoint": "Position of Front cap pipe outer",
    "va": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ]
  }
]

所以在 myArray.js 中有 3 个具有相同 id、slno 和 checkPoint 的重复项。所以结果它变成了只有一个元素。但是,数组“va”在每个元素中都不同。即 19、22 和 23 指数。所以它变成了一个数组,并为各个索引分配了各自的值,其余的值除了第 19,22 和 23 索引变为空。

【问题讨论】:

标签: javascript arrays


【解决方案1】:

应该这样做。

let a = [
  {
    "id": "61028558b45073399077becd",
    "slno": "A1",
    "checkPoint": "Position of adaptor CAT",
    "va": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      "YES",
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ]
  },
  {
    "id": "61028558b45073399077becd",
    "slno": "A1",
    "checkPoint": "Position of adaptor CAT",
    "va": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      "YES",
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ]
  },
  {
    "id": "61028558b45073399077becd",
    "slno": "A1",
    "checkPoint": "Position of adaptor CAT",
    "va": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      "YES",
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ]
  },
  {
    "id": "61028567b45073399077becf",
    "slno": "A2",
    "checkPoint": "Flush height of Adaptor CAT position",
    "va": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      "NO",
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ]
  },
  {
    "id": "61028572b45073399077bed1",
    "slno": "A3",
    "checkPoint": "Position of CAT bottom side",
    "va": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ]
  },
  {
    "id": "6102857fb45073399077bed3",
    "slno": "A4",
    "checkPoint": "Flush height of  CAT bottom side",
    "va": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ]
  },
  {
    "id": "6102858cb45073399077bed5",
    "slno": "B1",
    "checkPoint": "Position of Front cap pipe outer",
    "va": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ]
  }
];

let filtered = {};

a.forEach(v => {
  if (filtered[v.id]) {
    filtered[v.id].va = filtered[v.id].va.map((subvalue, position) => {
      return (subvalue || v.va[position]);
    });
  } else {
    filtered[v.id] = v;
  }
});

console.log(Object.entries(filtered));

【讨论】:

  • 在结果数组中,仅在索引 23 处存在值。但正如我已经在问题中解释的那样,第 22 和第 19 指数也需要价值
  • 啊,对不起。我知道您现在正在寻找什么 - 我已经编辑了答案,以便它合并 va 属性,同时减少,以便 id 是唯一的
猜你喜欢
  • 2020-04-28
  • 2019-12-20
  • 2013-11-08
  • 2017-03-22
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
  • 2017-03-20
  • 2017-01-01
相关资源
最近更新 更多