titanium - Hur kontrollerar man om ett arrayindex finns eller inte i JavaScript?


Jag arbetar med Titanium, min kod ser ut så här:

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;
}

Jag skickar ett index till currentData-arrayen. Jag kan fortfarande inte upptäcka ett icke-existerande index med koden ovan.

Svar #1

Använd typeofrayName[index] === 'odefinierad'

dvs.

if(typeof arrayName[index] === 'undefined') {
    // does not exist
}
else {
    // does exist
}

Svar #2

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

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

Svar #3

Nu för tiden skulle jag dra nytta av ecmascript och använda det på det sättet

return myArr?.[index]

Svar #4

Detta är exakt vad in-operatorn är till för. Använd den så här:

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

Det accepterade svaret är fel, det kommer att ge ett falskt negativt om värdet vid index är undefined:

const currentData = ['a', undefined], index = 1;

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

Svar #5

Någon rätta mig gärna om jag har fel, men så vitt jag vet är följande sant:

  1. Arrayer är egentligen bara objekt under huven på JS
  2. Således har de prototypmetoden hasOwnProperty „ärvd“ från Object
  3. I mina tester kan hasOwnProperty kontrollera om något finns på ett arrayindex.

Så, så länge ovanstående är sant, kan du helt enkelt:

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

användning :

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

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

Relaterade artiklar