【问题标题】:Efficient way to separate an array of objects based on another array基于另一个数组分离对象数组的有效方法
【发布时间】:2022-12-11 01:28:12
【问题描述】:

例如,我有一个对象数组和一个这样的数组:

const arrayObj = [
    {
        id: 1,
        name: "user1",
    },
    {
        id: 2,
        name: "user2",
    },
    {
        id: 3,
        name: "user3",
    },
]

const array = ["user1", "user2"]

我如何能够将 arrayObj 分成两个基于 array 的数组,如下所示:

const array1 = [
    {
        id: 1,
        name: "user1",
    },
    {
        id: 2,
        name: "user2",
    },
]

const array2 = [
    {
        id: 3,
        name: "user3",
    },
]

我在想也许是这样的:

const filteredArray = arrayObj.filter((el) => {
  return array.some((f) => {
    return f === el.name;
  });
});

但是有没有更有效/更快的方法?

【问题讨论】:

标签: javascript arrays


【解决方案1】:

除非您要处理的数组很大,否则您当前的代码很好。

如果数组巨大且当前代码太慢,将名称放入 Set 并检查 Set.has 而不是 Array.some - Set.has 在 Set 中有很多元素时要快得多。

const userSet = new Set(array);
const usersInUserSet = arrayObj.filter(user => userSet.has(user.name));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-10
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 2018-04-04
    相关资源
    最近更新 更多