当前位置: 首页 > 知识库问答 >
问题:

从对象数组中获取重复对象

单耘豪
2023-03-14

我有这个初始数组,希望根据from.flightnoto.flightno提取重复航班

const myArray = [
        { from: { flightNo: 'A11' }, to: { flightNo: 'B11' }, code: 23 },
        { from: { flightNo: 'A12' }, to: { flightNo: 'B45' }, code: 22 },
        { from: { flightNo: 'A12' }, to: { flightNo: 'B52' }, code: 21 },
        { from: { flightNo: 'A11' }, to: { flightNo: 'B11' }, code: 20 },
        { from: { flightNo: 'A14' }, to: { flightNo: 'B44' }, code: 25 },
        { from: { flightNo: 'A15' }, to: { flightNo: 'B69' }, code: 24 },
        { from: { flightNo: 'A14' }, to: { flightNo: 'B44' }, code: 26 },
      ];

  result: 
 [
    { from: { flightNo: 'A11' }, to: { flightNo: 'B11' }, code: 23 },
    { from: { flightNo: 'A11' }, to: { flightNo: 'B11' }, code: 20 },
    { from: { flightNo: 'A14' }, to: { flightNo: 'B44' }, code: 25 },
    { from: { flightNo: 'A14' }, to: { flightNo: 'B44' }, code: 26 },
  ]

我写了这个,但我只能得到第一个重复的,看起来不是很漂亮。

  const duplicates = myArray
    .map((item) => {
      let count = 0;
      for (let i = 0; i < myArray.length; i++) {
        if (count > 1) {
          count = 0;
          return item;
        }
        if (
          myArray[i]?.from?.flightNo == item?.from?.flightNo &&
          myArray[i]?.to?.flightNo == item?.to?.flightNo
        )
          count++;
      }
    })
    .filter((notUndefined) => notUndefined !== undefined);

有什么建议吗?

共有1个答案

宗政天逸
2023-03-14

您可以创建一个地图,通过航班号对(并使用json.stringify对该对进行字符串化)进行键控,每个键都有一个空数组。然后迭代数据以填充那些数组。

最后提取具有多个元素的子数组,并将结果平坦化:

null

const myArray = [{ from: { flightNo: 'A11' }, to: { flightNo: 'B11' }, code: 23 },{ from: { flightNo: 'A12' }, to: { flightNo: 'B45' }, code: 22 },{ from: { flightNo: 'A12' }, to: { flightNo: 'B52' }, code: 21 },{ from: { flightNo: 'A11' }, to: { flightNo: 'B11' }, code: 20 },{ from: { flightNo: 'A14' }, to: { flightNo: 'B44' }, code: 25 },{ from: { flightNo: 'A15' }, to: { flightNo: 'B69' }, code: 24 },{ from: { flightNo: 'A14' }, to: { flightNo: 'B44' }, code: 26 },];

let map = new Map(myArray.map(o => [JSON.stringify([o.from.flightNo, o.to.flightNo]), []]));
for (let o of myArray) map.get(JSON.stringify([o.from.flightNo, o.to.flightNo])).push(o);
let result = [...map.values()].filter(arr => arr.length > 1).flat();

console.log(result);
 类似资料:
  • 我有个简单的课 我创建了这个类的样本对象的ArrayList 这里没有显示我后来如何填充对象的其他字段(名称,地址等) 有没有一种方法可以使用字母数字字符串id快速检索其中一个对象,而无需遍历整个列表?(没有实现数据库层) 差不多

  • 如何从对象获取数组?我试图进入空数组,这样我就可以验证它的空状态。 输出

  • 我创建了一个如下数组: 如何获取/过滤该数组,使其仅具有“1”、“2”和“5”元素,如下所示: 最好的方法是什么?

  • 假设我有一个像这样的对象数组: 我如何循环它(如果我必须),以便我得到一个特定键值的列表。让我们来举一个所有名字的列表。 多谢了。

  • 我在开快车。js应用程序,有几个API将数据提供给下拉框。返回的数据格式为: 其中key是我的选项key,value是显示文本。这个数组的结构是固定的,我知道一个事实,我总是将key和value作为数组中每个对象的字段。 当我尝试验证提交的表单(额外的服务器端验证)时,我想交叉引用为字段提供的值与数组中“key”的所有值(blah、foo、bar、baz)。鉴于这将是一个经常使用的路由,我想避免每

  • 我有这个数组的对象,我想删除最后一个对象。有人能让我知道这样做吗?