我需要比较一个数组中的所有值,以了解它们是否全部相等.所以这很好,并给我预期的输出
var myArray1 = [50, 50, 50, 50, 50]; // all values are same, should return true
var myArray2 = [50, 50, 50, 50, 51]; // last value differs, should return false
function compare(array) {
var isSame = true;
for(var i=0; i < array.length; i++) {
isSame = array[0] === array[i] ? true : false;
}
return isSame;
}
console.log('compare 1:', compare(myArray1)); // true
console.log('compare 2:', compare(myArray2)); // false
然后我尝试使用reduce(),但看起来我误解了这个功能.他们都说这是假的.我做错了什么吗?我可以用它reduce()
来得到我需要的东西吗?如果是这样的话?
var myArray1 = [50, 50, 50, 50, 50];
var myArray2 = [50, 50, 50, 50, 51];
console.log('reduce 1:', myArray1.reduce(
function(a, b){
return a === b ? true : false
}
));
console.log('reduce 2:', myArray2.reduce(
function(a, b){
return a === b ? true : false
}
));
reduce
这里不是正确的工具,从一次迭代返回的值用于a
下一次迭代,并且reduce
不会短路.
如果你想使用其中一个数组方法来做这个,那every
将是一个合理的选择:
var myArray1 = [50, 50, 50, 50, 50];
var myArray2 = [50, 50, 50, 50, 51];
console.log('some 1:', myArray1.every(
function(value, _, array){
return array[0] === value;
}
));
console.log('some 2:', myArray2.every(
function(value, _, array){
return array[0] === value;
}
));