尝试比较数组中的项目以查看它们是否相同

时间:2019-06-07 03:24:20

标签: javascript loops for-loop

我正在创建一个带for循环和if语句的函数,以检查存储在给定数组中的每个项目是否完全相同,即1,1,1,1或“ a”,“ a”,“ a” ,“一种” 如果是,我要返回“ true”,否则返回“ false”

function isSame(arr) {
var compare = i
for(i = 0; i <= arr.length-1; i++){
if(arr[0] == compare)
console.log(true)
else {
    return false;
}}
}

目前无论输入什么内容,我都会得到错误的回报。

7 个答案:

答案 0 :(得分:3)

您可以使用Set获得唯一值。如果只有一个唯一,则表示数组元素相同。

let checkIfSame = (a) => new Set(a).size === 1;

console.log( checkIfSame( [1, 1, 1, 1] ) );
console.log( checkIfSame( [1, 1, 3, 1] ) );

答案 1 :(得分:2)

在执行i时尚未定义

var compare = i,因此compare初始化为undefined。然后,您再也不会更新compare。因此,您当前的代码只是对每个项目执行if (arr[0] == undefined)

一种替代方法是使用.every(),它返回一个布尔值,该布尔值指示数组中的每个项目是否满足给定谓词。

const isSame = (arr) => arr.every(i => i === arr[0]);

console.log( isSame(['1','1','1']) );
console.log( isSame(['a','b','c']) );

答案 2 :(得分:0)

您应该更改compare = arr [0]变量以存储第一项,并让循环与其余项进行比较。

var arr = [1,1,1,1];
function isSame(arr) {
var compare = arr[0]
var result = true;
for(i = 0; i <= arr.length-1; i++){
if(arr[i] == compare){
console.log(true)
}
else {
    return false;
}}

return result;
}

console.log(isSame(arr));

var arr = [1,1,1,1];
function isSame(arr) {
var compare = arr[0]
var result = true;
for(i = 0; i <= arr.length-1; i++){
if(arr[i] == compare){
console.log(true)
}
else {
    return false;
}}

return result;
}

console.log('is same? ' + isSame(arr));

答案 3 :(得分:0)

您永远不会返回true。但是,如果这样做,则您的算法不正确。例如,正如其他人所说,您将i声明为未定义的某个值。这是一个适合您的示例。您可能要考虑的唯一限制是参数实际上是否为数组

function isSame(arr){  
if (arr.length === 0)
    return true
let toReturn = true
const firstElement = arr[0]

for (let element of arr){
    if (element !== firstElement){
        toReturn = false
        break
    }
}
return toReturn

}

答案 4 :(得分:0)

使用>>> df2 = pd.DataFrame() >>> for i in df.columns.str[:1].unique(): try: df2[i] = df[[x for x in df.columns if x[:1] == i]].values.flatten() except: l = df[[x for x in df.columns if x[:1] == i]].values.flatten().tolist() df2[i] = l + [pd.np.nan] * (len(df2) - len(l)) >>> df2 a b c 0 1 5 9.0 1 3 7 0.0 2 2 6 NaN 3 4 8 NaN >>> 初始化compare时,i根本没有定义。现在,您正在尝试将数组的每个元素与i进行比较。这就是为什么你会虚假。您应该将代码更改为以下内容:

undefined

在ES6语法中,它也可以简化为:

function isSame(arr) {
  var compare = arr[0];
  var allSame = true;
  for(var i=0; i < arr.length; i++) {
    if(!allSame) return allSame;
    allSame = arr[i] === compare;
  }
  return allSame;
}

答案 5 :(得分:0)

就像其他人注意到的那样,函数var compare = i的第一行isSame()undefined的值存储在变量compare上,而此设置循环总是在比较每次迭代时array第一个元素。值为undefined

如果将数组的第一个元素与其他元素进行比较会更好。像这样:

function isSame(arr)
{
    for (let i = 1; i < arr.length; i++)
    {
        if (arr[i] !== arr[0])            
            return false;
    }

    return true;
}

console.log(isSame([1,1,1]));
console.log(isSame([1,2,1]));
console.log(isSame([]));
console.log(isSame([1]));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

请注意,只有在数组包含primitive types的情况下,此方法才能很好地起作用。要了解原因,请查看下一个示例:

console.log({key:"value"} === {key:"value"});
console.log([1,2] === [1,2]);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

答案 6 :(得分:0)

const getUniqueValues = arr => arr.filter((x, i, a) => a.indexOf(x) == i)
const isSame = arr => arr.length > 1 && getUniqueValues(arr).length === 1 ? true:false

console.log(isSame([1])) //false
console.log(isSame([1,2,3,4,4])) //false
console.log(isSame(['a','a','b'])) //false
console.log(isSame([1,1,1,1,1])) //true
console.log(isSame(['a','a','a','a'])) //true