现在javascript has the "map" function暂停数组。
似乎可以将它用作'foreach'运算符,例如:
fruitbowl.map(function(fruit){
... do stuff with fruit
})
这比说
更好还是更坏for(var i in fruitbowl){
... do stuff with fruitbowl[i]
}
保存必须使用索引但添加回调;它似乎并不常见,所以我犹豫使用但仍然想要。
答案 0 :(得分:7)
你提到的三种方法有不同的用途。
Array.prototype.map
方法的目的是创建一个 new array ,其结果是在每个数组元素上调用回调函数。
Array.prototype.forEach
方法的目的是迭代一个数组,每个数组元素执行一次提供的回调函数。
for...in
语句的目的是枚举对象属性。
我认为应该避免使用for...in
语句来遍历任何类似于数组的 1 对象,其中真正的目的是迭代而不是数字索引而不是枚举对象属性(即使知道这些索引是属性)。
避免for...in
迭代类似数组的对象的原因:
Array.prototype
对象,您将看到所有这些扩展属性。看一下这篇文章:
1 类似数组的对象我指的是包含连续数字属性和length
属性的任何对象
答案 1 :(得分:3)
使用被认为是有效的,但是严格地使用地图操作代替其副作用是不好的风格。
答案 2 :(得分:1)
可读性非常值得。地图可能会让那些从未见过这种方式的人感到困惑。它违反了“最不惊讶的原则”。
答案 3 :(得分:1)
在Perl中,地图的使用方式相似但更自然。
我的经验法则是,如果它不比循环读取更好,那么就不要使用它。很难调试。但是对于certain functions,map比循环更自然。如果你需要抓住它 - 不要这样做。可怜跟随你的人,包括你自己从现在起的那个人!
答案 4 :(得分:1)
不要使用map
作为副作用。如果您的任务是迭代数组以对每个对象执行某些操作,请使用foreach
。如果要映射值,例如转义一个字符串数组,使用map
。没有什么比清晰度和程序员更聪明的意图了。