该函数检查数组元素是否相同,如果相同,则应返回true。
当我使用下面的函数时,它会给出正确的结果。
var arr = [1, 2, 3, 4];
function isUniform(arr) {
var store = arr[0];
for (var i = 0; i < arr.length; i++) {
if (arr[i] !== store) {
return false;
}
}
return true;
}
console.log(isUniform(arr));
但是当我使用这样的功能时更改 if 条件,它返回false
var arr = [1, 2, 3, 4];
function isUniform(arr) {
var store = arr[0];
for (var i = 0; i < arr.length; i++) {
if (arr[i] === store) {
return true;
}
}
return false;
}
console.log(isUniform(arr));
答案 0 :(得分:2)
问题在于,如果下一个值与true
相同,您的代码段将返回arr[0]
,请参见以下示例:
var arr = [1, 1, 3, 1, 1];
function isUniform(arr) {
var store = arr[0];
for (var i = 0; i < arr.length; i++) {
if (arr[i] === store) {
return true;
}
}
return false;
}
console.log(isUniform(arr));
由于arr[0]
是 store
您应该使用Array#every()
来检查所有元素是否都符合特定条件:
var arr = [1, 1, 3, 1, 1];
var arr2 = [1,1,1,1,1,1,1];
function isUniform(arr) {
return arr.every(e => e === arr[0]);
}
console.log(isUniform(arr));
console.log(isUniform(arr2));
答案 1 :(得分:1)
firts循环给出了严格的答案,因为列表中的元素不相同,第二个循环的问题是它检查了列表中的每个元素,并且当我发现一个元素等于{{1}时}(在这种情况下为(array[0]
),它将返回true,而不能为true。
第二个循环应该是:
1
答案 2 :(得分:0)
因为如果第一个元素相同,它将返回true。它不会检查所有元素,而如果所有元素都相同,则第二个元素将返回true;如果其中一个元素不同,则它将返回false。
最简单的方法是:
(new Set(array)).size === 1
答案 3 :(得分:0)
第二个代码片段不会检查所有元素是否等于store
,如果至少一个元素等于true
,则返回store
。
如果所有元素都不等于false
,则第一个返回store
,如果所有元素都不等于true
,则第一个返回store
,但要保证,它不能测试所有元素是否都等于store
,在这种情况下,这只是合乎逻辑的结论。
答案 4 :(得分:-1)
它返回true ...您也可以考虑做...
arr.includes(arr[0]) // returns true