Javascript 重构forEach循环最有效的功能方法是什么?

Javascript 重构forEach循环最有效的功能方法是什么?,javascript,ecmascript-6,ecmascript-2016,Javascript,Ecmascript 6,Ecmascript 2016,我有一个从道具接受物品和可用物品的方法。在对数组进行迭代时,我应该在forEach循环中按两个条件过滤项。如果项id不存在或项id等于1,则传递第一个条件。第二个应该返回item并过滤'description'字段,否则,我们将我们的项目推送到'nextAvailableItems'数组中。在这种情况下,替换forEach循环最有效的功能方式是什么 项目结构: [{ id: 23740416, display_name: "test", date_from: "1970-12-31"

我有一个从道具接受物品和可用物品的方法。在对数组进行迭代时,我应该在forEach循环中按两个条件过滤项。如果项id不存在或项id等于1,则传递第一个条件。第二个应该返回item并过滤'description'字段,否则,我们将我们的项目推送到'nextAvailableItems'数组中。在这种情况下,替换forEach循环最有效的功能方式是什么

项目结构:

[{
  id: 23740416,
  display_name: "test",
  date_from: "1970-12-31"
}]
[{
  id: 23740416,
  display_name: "test",
  description: "Text"
}]
可用项目结构:

[{
  id: 23740416,
  display_name: "test",
  date_from: "1970-12-31"
}]
[{
  id: 23740416,
  display_name: "test",
  description: "Text"
}]
预期产出:

[{
  id: 23740416,
  display_name: "test"
}]
当前代码:

buildAvailableItems() {
  const { items, availableItems } = this.props
  const nextAvailableItems = [...availableItems]

  items.forEach(item => {
    if (!item.id || item.id === -1) {
      return
    }

    const availableItem = availableItems.find(availableItem => availableItem.id === item.id)

    if (availableItem) {
      const { id, display_name } = availableItem

      return { id, display_name }
    }
    const { id, display_name } = item

    nextAvailableItems.push({ id, display_name })
  })

  return nextAvailableItems
}
首先,我将
转换为ID查找。然后使用该查找筛选可用项。然后最后进行数组合并


首先,我将
转换为ID查找。然后使用该查找筛选可用项。然后最后进行数组合并。

请注意,从
forEach
返回内容没有多大作用。。。而且,由于您正在推进一个新的数组,您可能最好结合使用
过滤器
(删除那些ID无效/丢失的)和
映射
…请注意,从
forEach
返回内容没有多大作用。。。而且,由于您要进入一个新的数组,您可能最好结合使用
filter
(删除那些id无效/丢失的)和
map
…它应该是
itemIds.includes(…)
返回一个空数组,而不是预期的结果,我猜也是这样。filter(I=>item.id&&item.id!=-1)这里是item而不是i?请注意,可用的项可以是空数组
.filter(i=>item.id&&item.id!=-1)
不匹配的变量
i
。使用一个或另一个。另外,如果
itemIds
是一个集合,查找速度会更快。它应该是
itemIds。includes(…)
返回一个空数组而不是预期的结果,我猜也是。filter(I=>item.id&&item.id!=-1)here item而不是I?请注意,可用的项可以是一个空数组
。filter(i=>item.id&&item.id!==-1)
不匹配的变量
i
item
。使用一个或另一个。此外,如果设置了
itemIds
,查找速度会更快。