Reputation: 264
I use this function:
function search (){
v = [[2.0], [3.0], [4.0], [5.0]]
if(v.indexOf(2.0) != -1){
Logger.log ('if')
}else{
Logger.log('else')
}
}
editing
My real need is in the values of words like this I was answered about numbers so I did not change and only added
function search (){
v = [["One"], ["two"], ["three"], ["four"]]
if(v.indexOf("One") != -1){
Logger.log ('if')
}else{
Logger.log('else')
}
}
And instead of "if" returning to me, "else" returns to me. I apologize for the broken English
Upvotes: 1
Views: 75
Reputation: 4506
You input array is a multi
/two
dimensional array. You are searching for 2.0
which is actually embedded inside another smaller array. Try changing the function to below.
function search() {
v = [
["One"],
["two"],
["three"],
["four"]
]
if (v.findIndex(e => e[0] === 'One') != -1) {
console.log('if')
} else {
console.log('else')
}
}
search();
Upvotes: 2
Reputation: 1982
array.indexOf() is not applicable for nested array. If your array is primitive types then it's working, but if array is non-primitive types then through indexOf you can't match the value.
Use this instated of your function:
v.findIndex(ele => [...new Set(ele)][0] == 2.0) >=0 ? 'if' : 'else'
Upvotes: 0
Reputation: 846
Did you mean to write
v = [2.0, 3.0, 4.0, 5.0];
?
Because that will print out 'if'
.
Reason is that in your example, each element of v
array is an array of it's own.
If you really want it to be an array of arrays, then to make it work you can do this in the if
statement:
if ( v.flat().includes(2.0) )
flat
converts it from an array of array that contain a number, to an array of numbers.includes
is a nicer method to check if the array contains a value - no need to check for index :)Upvotes: 0
Reputation: 10765
You have an array of arrays, so trying to use indexOf
on the array of arrays will not work for your case. One option is to use flat
and some
in conjunction to flatten the array of arrays to one array and then check if the value is found inside the flattened array:
function search (){
v = [[2.0], [3.0], [4.0], [5.0]];
if(v.flat().some((a) => a === 2.0)){
console.log('if');
}else{
console.log('else');
}
}
search();
Upvotes: 0