【问题标题】:How to use _.union from lodash to de-duplicate multiple array in typescript?如何使用 lodash 中的 _.union 对打字稿中的多个数组进行重复数据删除?
【发布时间】:2021-08-20 02:53:14
【问题描述】:

我试过import _ from 'lodash-es'_.union(user.users.map(user => user.city))。但它并没有达到我的预期:["city_id1", "city_id2", "city_id3", "city_id4"]

什么是使用_.union 的正确方法,或其他更好的方法来展平所有数组并制作一个独特的数组?

### data
const user =
{
  "users": [
    {
      "id": "user_id1",
      "city": ["city_id1", "city_id2"]
    },
    {
      "id": "user_id2",
      "city": ["city_id3", "city_id4"]
    },
    {
      "id": "user_id3",
      "city": ["city_id1", "city_id3"]
    },
    {
      "id": "user_id4",
      "city": ["city_id2", "city_id4"]
    }
   ]
}

【问题讨论】:

  • 您可以简单地使用SetflatMap 那么为什么在这里使用lodash
  • 哦,我正在学习 angular/typescript 并且不熟悉所有技巧。如果可行,我很想得到你的回答。您介意提供您的示例代码吗?谢谢

标签: javascript angular typescript lodash


【解决方案1】:

您可以使用SetflatMap 来获得想要的结果。

这是单线解决方案

const result = [...new Set(user.users.flatMap((o) => o.city))];
console.log(result);

const user = {
  users: [{
      id: "user_id1",
      city: ["city_id1", "city_id2"],
    },
    {
      id: "user_id2",
      city: ["city_id3", "city_id4"],
    },
    {
      id: "user_id3",
      city: ["city_id1", "city_id3"],
    },
    {
      id: "user_id4",
      city: ["city_id2", "city_id4"],
    },
  ],
};

const set = new Set(user.users.flatMap((o) => o.city));
const arr = [...set];
console.log(arr);

【讨论】:

    【解决方案2】:

    如果你还想使用 lodash

    这就是答案

    
    const user =
    {
      "users": [
        {
          "id": "user_id1",
          "city": ["city_id1", "city_id2"]
        },
        {
          "id": "user_id2",
          "city": ["city_id3", "city_id4"]
        },
        {
          "id": "user_id3",
          "city": ["city_id1", "city_id3"]
        },
        {
          "id": "user_id4",
          "city": ["city_id2", "city_id4"]
        }
       ]
    }
    
    let a = user.users.map(item=>item.city)
    _.union(...a)
    

    【讨论】:

      【解决方案3】:

      遍历users数组并用_.union的结果填充另一个数组unique_cities

      var user_data =
      {
        "users": [
          {
            "id": "user_id1",
            "city": ["city_id1", "city_id2"]
          },
          {
            "id": "user_id2",
            "city": ["city_id3", "city_id4"]
          },
          {
            "id": "user_id3",
            "city": ["city_id1", "city_id3"]
          },
          {
            "id": "user_id4",
            "city": ["city_id2", "city_id4"]
          }
         ]
      };
      
      var unique_cities = [];
      user_data.users.forEach(user => {
        unique_cities = _.union(user.city, unique_cities);
      });
      
      console.log(JSON.stringify(unique_cities.sort()));
      <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>

      【讨论】:

        猜你喜欢
        • 2021-12-23
        • 2020-11-29
        • 1970-01-01
        • 2022-11-25
        • 1970-01-01
        • 2017-02-12
        • 2021-03-02
        • 2018-08-20
        相关资源
        最近更新 更多