【问题标题】:Check if array has multiple ids检查数组是否有多个 id
【发布时间】:2022-11-11 01:58:01
【问题描述】:

使用include() 时如何解决这个问题?

const allowedIds = [1, 3]

const allBoats = [{
  id: 1,
  name: 'titanic'
}, {
  id: 2,
  name: 'anna'
}, {
  id: 3,
  name: 'boaty McBoatface'
}, ]

const expectedResult = ['boaty McBoatface', 'titanic']

【问题讨论】:

  • 为什么'boaty McBoatface' 排在第一位?
  • 检查包含在过滤器中并映射过滤后的结果以获取名称
  • 请不要破坏自己的帖子。当您在此处发布时,即表示您授予 SO 在 CC-by SA 4.0 下分发内容的权利。任何破坏行为都将被撤销。

标签: javascript


【解决方案1】:

考虑将allowedIds 设为Set,然后在Array 上使用has,即O(1),而不是includes,即O(N)

const allowedIds = new Set([1, 3]);
const allBoats = [
  {
    id: 1,
    name: "titanic",
  },
  {
    id: 2,
    name: "anna",
  },
  {
    id: 3,
    name: "boaty McBoatface",
  },
];
const allowedBoats = allBoats.filter(b => allowedIds.has(b.id))
                             .map(b => b.name)
                             .sort();
console.log(allowedBoats);

其他可能有用的文档链接:

【讨论】:

    【解决方案2】:

    const allowedIds = [1, 3]
    
    const allBoats = [{
      id: 1,
      name: 'titanic'
    }, {
      id: 2,
      name: 'anna'
    }, {
      id: 3,
      name: 'boaty McBoatface'
    }, ]
    
    const result = allBoats
      .filter(b => allowedIds.includes(b.id))
      .map(b => b.name)
      .sort((a, b) => a.localeCompare(b))
    console.log('result', result)

    【讨论】:

    • 请添加一些解释和代码(可能为过滤器/映射/排序添加一些文档链接)寻找这种解决方案的人很有可能不会完全理解这些方法。
    • 我为您制作了一个可运行的代码 sn-p,它们对于显示运行代码及其输出很有用:Stack Overflow & run code snippet?
    • 请使用 Sash Sinha 的回答。使用 Set 提高性能
    【解决方案3】:

    你也可以试试这个

    allBoats.filter(entry => allowedIds.includes(entry.id)).map(item => item.name).sort()
    

    【讨论】:

    【解决方案4】:

    const allowedIds = [1, 3]
    
    const allBoats = [
        {
            id: 1,
            name: 'titanic'
        },
        {
            id: 2,
            name: 'anna'
        },
        {
            id: 3,
            name: 'boaty McBoatface'
        }
    ]
    
    const expectedResult = allBoats.reduce((p, c) => allowedIds.includes(c.id) ? p.concat(c.name) : p, []).sort((a, b) => a.localeCompare(b));
    
    console.log(expectedResult);

    【讨论】:

      【解决方案5】:

      如果您只想要 id 为 1 或 3 的人:

      const selections = allBoats.filter((val)=>{return val.id === 1 || val.id ===3});
      const result = selections.map((val,key)=>{ val.name}).sort()
      console.log(result) //gives ["boaty McBoatface", "titanic"]
      

      【讨论】:

      • 这将返回整个对象,而不仅仅是名称字符串,而且与将 id 存储在数组中相比,它的灵活性/可维护性也显着降低。
      猜你喜欢
      • 2017-01-09
      • 1970-01-01
      • 2021-12-11
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多