如何使用 lodash 中的 _.union 来删除打字稿中的多个数组?

How to use _.union from lodash to de-duplicate multiple array in typescript?

我已经尝试了 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"]
    }
   ]
}

您可以使用 Set and flatMap 来获得想要的结果。

这是单行解决方案

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);

如果你还想使用 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)

遍历 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>