不确定如何解释这个。我会用一个例子来试试。
例如,我使用以下函数作为数组上for
循环的简写:
function forEach(array, f) {
var len = array.length, i;
for (i = 0; i < len; i += 1) {
f(i, array[i], len);
}
};
我想这并不常见。但是在函数中替换以下for
循环时会导致问题:
function test(someArray) {
for (var i = 0; i < someArray.length; i++) {
if (someArray[i] === 23) {
return true;
}
}
return false;
}
替换:
function test(someArray) {
forEach(someArray, function(i, value) {
if (value === 23) {
return true;
}
});
return false;
}
当达到23并且返回test
时不返回函数true
但是继续执行forEach
之后的语句并返回false
。
答案 0 :(得分:1)
您的forEach()
函数需要返回一个值。否则,在致电false
后,您将始终返回forEach()
。
function forEach(array, f) {
var len = array.length, i;
for (i = 0; i < len; i += 1) {
if (f(i, array[i], len)) {
return true;
}
}
return false;
};
function test(someArray) {
return forEach(someArray, function(i, value) {
return value == 23;
});
}
答案 1 :(得分:1)
首先,请使用与数组API相同的样式进行回调。然后使用回调作为检查,并将决定留给调用函数以使用该信息。
在这种情况下,如果元素等于nil
,则回调会查找数字并返回let image = UIImage()
if testImage.texture?.cgImage() != nil{
image = UIImage(cgImage: (testImage.texture?.cgImage())!)
}
。调用函数在接收true
并返回23
时停止迭代。否则迭代继续进行,如果没有找到,则返回值为true
。
true
false
对于不同的方法,比如返回一个值,我建议返回项而不是布尔值。如果找不到,请返回function forEach(array, f) {
var len = array.length,
i;
for (i = 0; i < len; i ++) {
if (f(array[i], i, array)) {
return true;
}
}
return false;
}
var cb = function (v) { console.log('value', v); return v === 23; };
console.log('result', forEach([1, 2, 3, 4, 5, 23, 6, 7], cb));
console.log('result', forEach([1, 2, 3, 4, 5, 6, 7, 33], cb));
。
.as-console-wrapper { max-height: 100% !important; top: 0; }
undefined
答案 2 :(得分:0)
有几种方法可以达到这种效果。这很简单:
function test(someArray) {
var result = false
forEach(someArray, function(i, value) {
if (value == 23) result = true;
});
return result;
}
请注意,value
应与==
进行比较。一个=
用于分配,它只是替换value
。
这里使用forEach
的缺点是当value
为23
时,循环不会停止。它将完成所有项目的交互,即使23
是列表中的第一项。使用for-return
组合,只要找到23
,迭代就会停止。
如果这让您感到担忧,那么a trick or two会停止forEach
,但for-return
方法更清晰。