// My for loop function:
$$$ = {
\t \t any: function (arr, callback) {
\t \t for (var i = 0, l = arr.length; i < l; i ++) {
\t \t \t \t if (callback(arr[i])) {
\t \t \t \t return true;
\t \t \t \t }
\t \t \t }
\t \t return false;
\t \t }
}
// My forEach function:
$$$={
\t any: function(array, callback){
\t \t array.forEach(function(value){
\t \t \t // console.log(value)
\t \t \t if (callback(value)) {
\t \t \t \t return true;
\t \t \t }
\t \t \t // return false;
\t \t })
\t \t return false;
\t }
}
、内部コールバック関数で
return true
そのコールバック関数からのみ戻り、外部関数が返されることはありません。
.forEach
ループが完了するまで実行した後、常に戻りfalse
.any
機能そのものます。
FWIW、.forEach
は、一致が見つかるとすぐに要素に対して反復処理を終了させる方法がないため、.any
関数に実際には適していないため、効率が低下します。たとえば、10000要素の配列があるかもしれませんが、.forEach
を使用すると、最初の要素が述語を満たしていてもループし続けます。あなたが本当に.forEach
を使用する必要がある場合は、言っ
、しかし、解決策は次のようになります。少なくとも一度マッチが発見され、ユーザが指定したコールバックを呼び出さないようにすることができ、さらに最適化
function all(array, callback) {
var result = false;
array.forEach(function(value) {
if (callback(value)) {
result = true;
}
});
return result;
}
:
function all(array, callback) {
var result = false;
array.forEach(function(value) {
if (!result && callback(value)) {
result = true;
}
});
return result;
}
NB:JavaScriptはすでに必要なものを行う関数を持っている - Array.prototype.some
ステップで、あなたのプログラムステップを歩くためにデバッガを使用してください。 –
"エラー/タイプミスはできません"クローズ理由を使用した人は間違っています。これは_logic_エラーです。 – Alnitak