我正在尝试创建一个计算数组的函数,如果数组中的每个元素都相同,它将返回 true ,否则返回 false 。我不希望它为每个单独的元素(对于整个数组)返回 true / false 。
此方法有效,但是它为数组中的每个元素返回 true / false :
function isUniform(arr){
let first = arr[0];
for (let i = 1; i <arr.length; i++){
if (arr[0] !== arr[i]){
console.log(false);
} else {
console.log(true);
}
}
}
此方法一次返回 true / false ,然后在末尾再次输出true:
function isUniform(arr){
let first = arr[0];
for (let i = 1; i <arr.length; i++){
if (arr[0] !== arr[i]){
console.log(false);
}
}
console.log(true);
}
答案 0 :(得分:3)
如果您要测试数组的每个元素是否都为真,则不需要编写太多内容,您可以使用array.every
并只比较第一个元素。 every()
很好,因为如果发现错误条件,它将提早返回。
var arr1 = [1, 1, 1, 1, 1, 1, 1]
var arr2 = [1, 1, 1, 2, 1, 1, 1]
console.log(arr1.every((n, _, self) => n === self[0]))
console.log(arr2.every((n, _, self) => n === self[0]))
对于一个空数组,这可能会返回true,这可能是您想要的,也可能不是您想要的。
答案 1 :(得分:2)
用false
添加一个return
statement并结束该函数。返回值可以稍后使用。
function isUniform(arr) {
let first = arr[0];
for (let i = 1; i < arr.length; i++) {
if (arr[0] !== arr[i]) {
console.log(false);
return false;
}
}
console.log(true);
return true;
}
要使用返回值,您还需要在末尾返回true
。
答案 2 :(得分:2)
替代使用对象Set
new Set(arr).size === 1 // This means all the elements are equal.
let isUniform = (arr) => new Set(arr).size === 1;
console.log(isUniform([4,4,4,4,4]));
console.log(isUniform([4,4,4,4,4,5]));
答案 3 :(得分:1)
尝试使用Array#every
。其检查所有其他值与数组的第一个索引相同
$.ajax({
url: 'http://boschonurlu.herokuapp.com/getStocks',
type: 'get',
data: jQuery.param({id: search}),
dataType: 'json',
contentType:"application/json; charset=utf-8",
headers: {
"cache-control" : "no-cache",
//also this(below) didn't work
"Access-Control-Allow-Origin" : "*"
}
})
答案 4 :(得分:0)
问题是,一旦找到第一个错误元素,就需要停止:
function isUniform(arr){
let first = arr[0];
let uniform = true;
for (let i = 1; i <arr.length; i++){
if (arr[0] !== arr[i]){
uniform = false;
break;
}
}
console.log(uniform);
}