[javascript] How to check if array element exists or not in javascript?

I am working with Titanium, my code looks like this:

var currentData = new Array();

if(currentData[index]!==""||currentData[index]!==null||currentData[index]!=='null')
{
    Ti.API.info("is exists  " + currentData[index]);
    return true;
}
else
{   
    return false;
}

I am passing an index to the array currentData. I am still not able to detect a non-existing element using above code.

This question is related to javascript titanium titanium-mobile

The answer is


Someone please correct me if i'm wrong, but AFAIK the following is true:

  1. Arrays are really just Objects under the hood of JS
  2. Thus, they have the prototype method hasOwnProperty "inherited" from Object
  3. in my testing, hasOwnProperty can check if anything exists at an array index.

So, as long as the above is true, you can simply:

const arrayHasIndex = (array, index) => Array.isArray(array) && array.hasOwnProperty(index);

usage:

arrayHasIndex([1,2,3,4],4); outputs: false

arrayHasIndex([1,2,3,4],2); outputs: true


Simple way to check item exist or not

Array.prototype.contains = function(obj) {
    var i = this.length;
    while (i--)
       if (this[i] == obj)
       return true;
    return false;
}

var myArray= ["Banana", "Orange", "Apple", "Mango"];

myArray.contains("Apple")

var demoArray = ['A','B','C','D'];
var ArrayIndexValue = 2;
if(ArrayIndexValue in demoArray){
   //Array index exists
}else{
   //Array Index does not Exists
}

This also works fine, testing by type against undefined.

if (currentData[index] === undefined){return}

Test:

_x000D_
_x000D_
const fruits = ["Banana", "Orange", "Apple", "Mango"];_x000D_
_x000D_
if (fruits["Raspberry"] === undefined){_x000D_
  console.log("No Raspberry entry in fruits!")_x000D_
}
_x000D_
_x000D_
_x000D_


This way is easiest one in my opinion.

var nameList = new Array('item1','item2','item3','item4');

// Using for loop to loop through each item to check if item exist.

for (var i = 0; i < nameList.length; i++) {
if (nameList[i] === 'item1') 
{   
   alert('Value exist');
}else{
   alert('Value doesn\'t exist');
}

And Maybe Another way to do it is.

nameList.forEach(function(ItemList)
 {
   if(ItemList.name == 'item1')
        {
          alert('Item Exist');
        }
 }

you can simply use this:

var tmp = ['a', 'b'];
index = 3 ;
if( tmp[index]){
    console.log(tmp[index] + '\n');
}else{
    console.log(' does not exist');
}

This is exactly what the in operator is for. Use it like this:

if (index in currentData) 
{ 
    Ti.API.info(index + " exists: " + currentData[index]);
}

The accepted answer is wrong, it will give a false negative if the value at index is undefined:

_x000D_
_x000D_
const currentData = ['a', undefined], index = 1;_x000D_
_x000D_
if (index in currentData) {_x000D_
  console.info('exists');_x000D_
}_x000D_
// ...vs..._x000D_
if (typeof currentData[index] !== 'undefined') {_x000D_
  console.info('exists');_x000D_
} else {_x000D_
  console.info('does not exist'); // incorrect!_x000D_
}
_x000D_
_x000D_
_x000D_


If you are looking for some thing like this.

Here is the following snippetr

_x000D_
_x000D_
var demoArray = ['A','B','C','D'];_x000D_
var ArrayIndexValue = 2;_x000D_
if(demoArray.includes(ArrayIndexValue)){_x000D_
alert("value exists");_x000D_
   //Array index exists_x000D_
}else{_x000D_
alert("does not exist");_x000D_
   //Array Index does not Exists_x000D_
}
_x000D_
_x000D_
_x000D_


_x000D_
_x000D_
var fruits = ["Banana", "Orange", "Apple", "Mango"];_x000D_
if(fruits.indexOf("Banana") == -1){_x000D_
    console.log('item not exist')_x000D_
} else {_x000D_
 console.log('item exist')_x000D_
}
_x000D_
_x000D_
_x000D_


(typeof files[1] === undefined)?
            this.props.upload({file: files}):
            this.props.postMultipleUpload({file: files widgetIndex: 0, id})

Check if the second item in the array is undefined using the typeof and checking for undefined


If elements of array are also simple objects or arrays, you can use some function:

// search object
var element = { item:'book', title:'javasrcipt'};

[{ item:'handbook', title:'c++'}, { item:'book', title:'javasrcipt'}].some(function(el){
    if( el.item === element.item && el.title === element.title ){
        return true; 
     } 
});

[['handbook', 'c++'], ['book', 'javasrcipt']].some(function(el){
    if(el[0] == element.item && el[1] == element.title){
        return true;
    }
});

I had to wrap techfoobar's answer in a try..catch block, like so:

try {
  if(typeof arrayName[index] == 'undefined') {
    // does not exist
  }
  else {
  // does exist
  }
} 
catch (error){ /* ignore */ }

...that's how it worked in chrome, anyway (otherwise, the code stopped with an error).


var myArray = ["Banana", "Orange", "Apple", "Mango"];

if (myArray.indexOf(searchTerm) === -1) {
  console.log("element doesn't exist");
}
else {
  console.log("element found");
}

Consider the array a:

var a ={'name1':1, 'name2':2}

If you want to check if 'name1' exists in a, simply test it with in:

if('name1' in a){
console.log('name1 exists in a')
}else
console.log('name1 is not in a')

If you use underscore.js then these type of null and undefined check are hidden by the library.

So your code will look like this -

var currentData = new Array();

if (_.isEmpty(currentData)) return false;

Ti.API.info("is exists  " + currentData[index]);

return true;

It looks much more readable now.


const arr = []

typeof arr[0] // "undefined"

arr[0] // undefined

If boolean expression

typeof arr[0] !== typeof undefined

is true then 0 is contained in arr


When trying to find out if an array index exists in JS, the easiest and shortest way to do it is through double negation.

let a = [];
a[1] = 'foo';
console.log(!!a[0])   // false
console.log(!!a[1])   // true