我正在创建一个带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;
}}
}
目前无论输入什么内容,我都会得到错误的回报。
答案 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