A good person
A good person

Reputation: 264

Incorrect value returns

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

Answers (4)

Salvino D'sa
Salvino D'sa

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

ArtBindu
ArtBindu

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'

enter image description here

Upvotes: 0

Nikola Dim
Nikola Dim

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) )

  1. flat converts it from an array of array that contain a number, to an array of numbers.
  2. includes is a nicer method to check if the array contains a value - no need to check for index :)

Upvotes: 0

Ryan Wilson
Ryan Wilson

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

Related Questions