我在跟随一段代码时遇到了麻烦:
function isUniform (arr) {
arr.forEach (function (el){
console.log (el);
if (arr [0] !== el) {
return (false);
}
})
return (true);
}
console.log (isUniform ([1, 1, 1, 1]));
console.log (isUniform ([2, 1, 1, 1]));
console.log (isUniform (["a", "b", "p"]));
console.log (isUniform (["b", "b", "b"]));
它应该返回" true"当数组中的所有元素都相同时," false"否则,它会继续返回" true"并且通过测试我发现JavaScript跳过了唯一的" if"言。
编辑:不重复,因为我在自己的代码上征求意见。具体说明为什么" if"嵌套在forEach中的语句被忽略,这在其他问题中没有涉及。
答案 0 :(得分:1)
[1,1,1,1].every( (val, i, arr) => val === arr[0] ) //True
[1,1,2,1].every( (val, i, arr) => val === arr[0] ) //False
如提到in this post
答案 1 :(得分:0)
.forEach
忽略了回调的结果,并且是错误的工作工具,因为你基本上重新实现了.every()
,它具有一旦知道它就停止迭代的额外优势无法返回true
。
function isUniform (arr) {
return arr.every(function (el){
return arr[0] === el
});
}
console.log (isUniform ([1, 1, 1, 1]));
console.log (isUniform ([2, 1, 1, 1]));
console.log (isUniform (["a", "b", "p"]));
console.log (isUniform (["b", "b", "b"]));
如果您打算自己实现它,我会使用for-of
循环,以便您可以退出。
function isUniform (arr) {
for (const el of arr) {
if (el !== arr[0]) {
return false;
}
}
return true;
}
console.log (isUniform ([1, 1, 1, 1]));
console.log (isUniform ([2, 1, 1, 1]));
console.log (isUniform (["a", "b", "p"]));
console.log (isUniform (["b", "b", "b"]));
答案 2 :(得分:0)
return false;
函数中的forEach
只会破坏传递的回调。
添加一个变量来存储布尔值。
function isUniform (arr) {
var result = true;
arr.forEach (function (el) {
console.log (el);
if (arr [0] !== el) {
result = false;
}
});
return result;
}
答案 3 :(得分:0)
function isUniform (arr) {
let flag = true;
arr.forEach (function (el){
console.log (el);
if (arr[0] !== el) {
flag = false;
}
})
return flag;
}
console.log (isUniform ([1, 1, 1, 1]));
console.log (isUniform ([2, 1, 1, 1]));
console.log (isUniform (["a", "b", "p"]));
console.log (isUniform (["b", "b", "b"]));