JavaScript For loop vs for in 不起作用
JavaScript For loop vs for in does not work
我编写了两个名为 some 和 every 的函数,期望得到如下所示的结果:
console.log(every([NaN, NaN, NaN], isNaN));
// → true
console.log(every([NaN, NaN, 4], isNaN));
// → false
console.log(some([NaN, 3, 4], isNaN));
// → true
console.log(some([2, 3, 4], isNaN));
// → false
我的职能是:
function every(array,predicate){
for (var element in array){
if (!predicate(element))
return false;
}
return true;
}
function some(array, predicate){
for (var element in array){
if (predicate(element))
return true;
}
return false;
}
但是结果都是false
一旦我将 for...in
更改为 for
循环,答案就正确了。
function every(array, predicate) {
for (var i = 0; i < array.length; i++) {
if (!predicate(array[i]))
return false;
}
return true;
}
function some(array, predicate) {
for (var i = 0; i < array.length; i++) {
if (predicate(array[i]))
return true;
}
return false;
}
为什么for..in
不能得出正确答案?
for..in
遍历您正在遍历的对象的 属性 名称。
在这种情况下,这些将是 0
、1
、2
,因此您的尝试是对这些而不是实际的数组元素调用谓词。
Don't use for..in
with arrays。无法保证迭代顺序,它可能会迭代非索引属性。
如果您不想使用传统的 for
循环,请考虑使用 for…of
循环,它会遍历数组中的元素。 for…in
遍历键。
function every (array, predicate) {
for (var element of array) {
if (!predicate(element)) {
return false;
}
}
return true;
}
注意:根据文档,这需要一个运行 ES6 Harmony 提案的实现。
我编写了两个名为 some 和 every 的函数,期望得到如下所示的结果:
console.log(every([NaN, NaN, NaN], isNaN));
// → true
console.log(every([NaN, NaN, 4], isNaN));
// → false
console.log(some([NaN, 3, 4], isNaN));
// → true
console.log(some([2, 3, 4], isNaN));
// → false
我的职能是:
function every(array,predicate){
for (var element in array){
if (!predicate(element))
return false;
}
return true;
}
function some(array, predicate){
for (var element in array){
if (predicate(element))
return true;
}
return false;
}
但是结果都是false
一旦我将 for...in
更改为 for
循环,答案就正确了。
function every(array, predicate) {
for (var i = 0; i < array.length; i++) {
if (!predicate(array[i]))
return false;
}
return true;
}
function some(array, predicate) {
for (var i = 0; i < array.length; i++) {
if (predicate(array[i]))
return true;
}
return false;
}
为什么for..in
不能得出正确答案?
for..in
遍历您正在遍历的对象的 属性 名称。
在这种情况下,这些将是 0
、1
、2
,因此您的尝试是对这些而不是实际的数组元素调用谓词。
Don't use for..in
with arrays。无法保证迭代顺序,它可能会迭代非索引属性。
如果您不想使用传统的 for
循环,请考虑使用 for…of
循环,它会遍历数组中的元素。 for…in
遍历键。
function every (array, predicate) {
for (var element of array) {
if (!predicate(element)) {
return false;
}
}
return true;
}
注意:根据文档,这需要一个运行 ES6 Harmony 提案的实现。