[英]javascript loop through array with “for” and “ForEach”
我試圖創建一個將數組作為參數的函數,並且僅當數組中的所有項目都相同時才返回“ true”。
我嘗試使用for循環 ,我嘗試使用forEeach循環
第一個作品很棒。
第二個沒有!
為什么?
這是我的第一個代碼:
function isUniform(ary) {
var first = ary[0];
for (i = 0; i < ary.length; i++) {
if (first !== ary[i]) {
return false;
}
}
return true;
}
console.log(isUniform([1, 2, 1]));
這是我的第二個:
function isUniform(ary) {
var first = ary[0];
ary.forEach(function(element) {
if (first !== element) {
return false;
}
});
return true;
}
console.log(isUniform([1, 2, 1]));
在第二個示例中,“內部” return
是傳遞給forEach
的函數的返回。 它不會導致從立即返回isUniform
功能。 取而代之的是,您傳遞給forEach
這個小匿名函數可以為數組的每個元素愉快地運行到完成。
完成所有元素的運行后, isUniform
函數將簡單地返回true。
通過返回true,您將true返回到forEach函數回調,而您的for循環將true返回給該函數。 如果要使用當前方法,則forEach在執行回調時需要參考對象。 那就是它與for循環的不同之處。
function isUniform(ary) { var first = ary[0]; val = true; ary.forEach(element => { if (first !== element) { val = false; } }); return val; } console.log(isUniform([1, 1, 1])); console.log(isUniform([1, 2, 1]));
您已經可以利用每個功能。
arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; arr2 = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; console.log(arr1.every((a, _, aa) => aa[0] === a)); console.log(arr2.every((a, _, aa) => aa[0] === a));
您無法脫離forEach。
試試這個。 您可以使用標志來實現。
var falg = false;
函數isUniform(ary){
var first = ary[0];
ary.forEach(function(element) {
if (first !== element) {
falg = true;
return false;
}
});
if(falg)
return false
return true;
}
console.log(isUniform([1,2,1]));
@Arrow的帖子中已經解決了部分問題,如果您使用forEach
,它不關心返回值,那么您必須自己累加結果(而且,沒有“正常”的方法可以退出循環) ,但如果您確實願意,可以拋出異常)。
對於“為什么”部分:由於定義。 forEach
不在乎返回值,而是無條件地為所有元素運行傳遞的函數。
forEach
的簡化實現如下:
Array.prototype.myForEach=function(callback){ // or callback,diz
for(var i=0;i<this.length;t++)
callback(this[i],i,this); // or callback.call(diz,this[i],i,this);
}
callback
的結果被完全忽略。 (注釋部分增加了對可選上下文參數的支持)
“更正式”的polyfill會做一些額外的檢查,但也並不復雜: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#Polyfill
您可以嘗試一下嗎,將var元素更改為x,並使用lambdas嗎?
function isUniform(ary) {
var first = ary[0];
ary.forEach((x) => {
if(first !== x){
return false;
}
});
return true;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.