我对JavaScript非常陌生,我遇到了一个我不明白的问题。
我想编写函数,它以数组作为参数,如果数组中的所有元素都相同,则返回true。
到目前为止,我知道简单的for循环更有效,但是我想用forEach()来执行这个简单的函数。
function isUniform(array) {
let uniChecker = array[0];
array.forEach(function(element) {
if (uniChecker !== element) {
return false;
}
});
return true;
}它总是返回true,即使它应该返回false。
发布于 2019-05-14 11:25:54
forEach()抛出返回值,并总是返回未定义的
因此,无论您在代码中做了什么,来自forEach的返回值都不会被返回。
当满足条件时,您可以创建一个设置为false的标志(如果您想使用ForEach,这是一个建议)。
function isUniform(array) {
let flag=true;
let uniChecker = array[0];
array.forEach(function(element) {
if (uniChecker !== element) {
flag=false;
}
});
return flag;
}发布于 2019-05-14 11:20:16
不幸的是,从forEach回调返回对外部作用域没有任何作用,它只是退出回调作用域。虽然可以使用forEach,但这并不是最有效的方法,因为没有真正的方法可以提前退出循环。
更好的选择是每一个 / 一些,这些函数旨在测试数组中的项并检测异常(由您提供的任何条件确定),并在第一个不匹配的情况下退出。
const isUniform = arr => arr.every(x => arr[0] === x)游乐场
const arr = [1,1,3,1,1,2]
// using `every` (recommended)
console.log(`Using 'every'...`);
let isUniform = arr => arr.every(x => {
console.log(`Testing ${x}`);
return arr[0] === x;
});
console.log(isUniform(arr));
// using `some` (bit more complicated but can still work)
console.log(`Using 'some'...`);
isUniform = arr => !arr.some(x => {
console.log(`Testing ${x}`);
return arr[0] !== x;
});
console.log(isUniform(arr));
发布于 2019-05-14 11:20:27
如果将返回false添加到forEach中,则无法获得正确的checked值。使用for循环,这样您就可以在找到项时添加中断:
function isUniform(array) {
let uniChecker = array[0];
var isChecked = true;
for (var i = 0; i < array.length; i++) {
if (uniChecker !== array[i]) {
isChecked = false;
break;
}
}
return isChecked;
}或者您可以使用some或every来测试条目是否存在于数组中。
function isUniform(array) {
return array.some(x => array[0] === x);
}https://stackoverflow.com/questions/56129153
复制相似问题