我正在努力理解foreach和map之间的区别。在以下渲染函数中,如果" foreach"被"映射"替换为" foreach"。我不明白为什么它不适合" foreach"。{item.ID}和{item.text}均具有两种方法。那么,为什么使用" foreach"时未设置"待办事项"的道具?
render() {
return(
<ul>
{this.props.items.forEach(function(item) {
return (
<TodoItem id={item.id} text={item.text} />)
})}
</ul>
);
}
因此,如果" foreach"不返回任何内容,那么如何也无法工作:
render() {
return(
<ul>
{this.props.items.forEach(function(item) {
<TodoItem id={item.id} text={item.text} />
})}
</ul>
);
}
map
函数返回一系列项目,而 forEach
只需在它们上循环。为了使此代码工作使用:
render() {
const items = [];
this.props.items
.forEach(item => items.push(
<li>
<TodoItem id={item.id} key={item.id} text={item.text} />
</li>
))
return(
<ul>{items}</ul>
);
}
尝试以下简单示例,以了解为什么在这种情况下foreach不起作用:
[1,2,3].forEach((n)=> n); => returns undefined
[1,2,3].map((n)=> n); => returns [1,2,3]
@nenad vracar提到的map
实际上将返回东西。如果您想对另一个数组,对象或代码进行整理,则可以使用forEach
。但是,由于您想返回最终显示在DOM上的东西。使用map
。
另外,不要忘记 return
无论您映射什么。这是一个常见的错误,因为您不需要使用forEach
的返回。
基本上是 map
返回数组,而 forEach
却没有返回
在JSX/React上下文中,您需要返回一个分析器列表/节点标签的列表,而解析器将在真实和虚拟DOM中转换为节点;
像foreach这样的副作用工作您没有任何解析。
foreach()只需循环循环。它丢弃了返回值,并且始终返回未定义。这种方法的结果没有给我们输出。
map()通过元素循环分配内存,并通过迭代主数组来存储返回值。
var numbers = [2, 3, 5, 7];
var forEachNum = numbers.forEach(function(number) {
return number
})
console.log(forEachNum)
//output undefined
var mapNum = numbers.map(function(number) {
return number
})
console.log(mapNum)
//output [2,3,5,7]
//map() is faster than forEach()
地图返回一个新数组,而foreach返回未定义。
这是两种方法之间的一些差异。
映射分配内存,并存储返回值,而foreach扔掉返回值并始终返回未定义。
地图是可链的,但不是。这意味着您可以在地图之后使用其他方法,而不是在foreach之后使用。
映射用于转换数组的元素,而foreach用于循环穿过数组的元素。
地图返回一个值数组,而foreach返回未定义。
希望这会有所帮助!