【问题标题】:How to use the filter method inside the map如何使用地图内部的过滤方法
【发布时间】:2021-09-09 19:34:23
【问题描述】:

不能在 .map() 中使用 .filter()。我有数组“itemsArr”

const itemsArr = [9, 10, 13]

和其他数组“数据”

const data = [{id: 1}, {id: 2}, ... {id: 99}]

我正在尝试执行这样的代码:

itemsArr.map(item => (
    data.filter((e) => e.id === item).map(item => (
        console.log(item.id)
    ))
))

但是没有任何效果,控制台是空的。 我只想从我的“数据”数组中过滤掉“itemsArr”数组中带有“id”的记录

这样的代码可以正常工作:

itemsArr.map(item => (
    data.map(item => (
        console.log(item.id)
    ))
))

更新:

        {
            itemsArr.map(item => (
                data.filter((e) => e.id === item).map(item => (
                    <div key={item.id}>
                        <Link href={`/${item.cat}`}><a>{item.cat}</a></Link>
                        <Link href={`/${item.cat}/${item.id}`}><a>{item.name}</a></Link>
                        <Link href={`/${item.cat}/${item.id}`}><a></a></Link>
                        <img alt={item.name} src={`/images/${item.imgmdh}`}></img>                          
                    </div>
                ))
            ))
        }

【问题讨论】:

  • 你能说明目标吗?是否要获取data 数组中具有itemsArr 中的ID 的对象数组?
  • @danh 目标 - 从具有“数据”对象的数组中仅显示与 itemsArr 数组匹配的那些 ID。而不是 console.log 我将显示布局
  • @danh 我添加了更完整的代码

标签: javascript arrays ecmascript-6


【解决方案1】:

无需映射。可以使用includes来检查itemsArr中是否存在id:

const itemsArr = [1,2,3]
const data = [{id: 1}, {id: 2}, {id: 99}]

const filtered = data.filter(datum => itemsArr.includes(datum.id))

console.log(filtered)

【讨论】:

  • @MKTF 如果对您有帮助,可以点击检查以接受答案?
【解决方案2】:

您可以使用array#filterarray#some 来获得itemsArrdata 中的匹配值。

const itemsArr = [9, 10, 13],
      data = [{id: 1}, {id: 2}, {id:9}, {id: 10}, {id: 99}],
      result = itemsArr.filter(num => data.some(o => o.id === num));
console.log(result);

【讨论】:

    猜你喜欢
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    相关资源
    最近更新 更多