javascript - How to join .map and .filter to filter and remove duplicate in object array - Stack Overflow

How to join .map and .filter to filter and remove duplicate in object array?I currently have to use tw

How to join .map and .filter to filter and remove duplicate in object array?

I currently have to use two variables for this:

Image example

See code Sandbox example

const arrayOne = [
    {
      id: 1,
      name: "João",
      city: {
        id: 1,
        name: "Rio de Janeiro"
      }
    },
    {
      id: 1,
      name: "Pedro",
      city: {
        id: 2,
        name: "Salvador"
      }
    },
    {
      id: 1,
      name: "Tiago",
      city: {
        id: 1,
        name: "Rio de Janeiro"
      }
    }
  ];

  const arrayTwo = arrayOne.map(function (item, index) {
    return item.city;
  });

  const arrayThree = arrayTwo.filter(
    (elem, index, arr) => index === arr.findIndex((t) => t.id === elem.id)
  );

How to join .map and .filter to filter and remove duplicate in object array?

I currently have to use two variables for this:

Image example

See code Sandbox example

const arrayOne = [
    {
      id: 1,
      name: "João",
      city: {
        id: 1,
        name: "Rio de Janeiro"
      }
    },
    {
      id: 1,
      name: "Pedro",
      city: {
        id: 2,
        name: "Salvador"
      }
    },
    {
      id: 1,
      name: "Tiago",
      city: {
        id: 1,
        name: "Rio de Janeiro"
      }
    }
  ];

  const arrayTwo = arrayOne.map(function (item, index) {
    return item.city;
  });

  const arrayThree = arrayTwo.filter(
    (elem, index, arr) => index === arr.findIndex((t) => t.id === elem.id)
  );
Share Improve this question asked Nov 4, 2021 at 22:08 Cleiton FreitasCleiton Freitas 53711 silver badges25 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 5

If your filter is just to remove duplicates consider creating a Map which simply overwrites all duplicate city.ids. This can then be converted back to an array, here using spread syntax on the Map.values().

const arrayOne = [
  { id: 1, name: 'João', city: { id: 1, name: 'Rio de Janeiro' } },
  { id: 1, name: 'Pedro', city: { id: 2, name: 'Salvador' } },
  { id: 1, name: 'Tiago', city: { id: 1, name: 'Rio de Janeiro' } },
];

const arrayTwo = [...new Map(arrayOne.map(({ city }) => [city.id, city])).values()];

console.log(arrayTwo);

Just chain them together?

  const result = arrayOne.map(function (item, index) {
    return item.city;
  }).filter(
    (elem, index, arr) => index === arr.findIndex((t) => t.id === elem.id)
  );

If you mean that you want to map and filter at the same time, then you can use either flatMap or reduce as described in another Q/A: https://stackoverflow./a/34398349/211627

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744285883a4566793.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信