Javascript 重构forEach循环最有效的功能方法是什么?
我有一个从道具接受物品和可用物品的方法。在对数组进行迭代时,我应该在forEach循环中按两个条件过滤项。如果项id不存在或项id等于1,则传递第一个条件。第二个应该返回item并过滤'description'字段,否则,我们将我们的项目推送到'nextAvailableItems'数组中。在这种情况下,替换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"
[{
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
,查找速度会更快。