Як перевірити, чи існує елемент масиву в JavaScript?


198

Я працюю з Titanium, мій код виглядає приблизно так:

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

Я передаю індекс масиву currentData. Я все ще не в змозі виявити неіснуючий елемент за допомогою наведеного вище коду.


1
Ваша логіка неправильна. Вам потрібні сполучники ( &&) між окремими умовами.
JK

Відповіді:


382

Використовуйте typeof arrayName[index] === 'undefined'

тобто

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

4
+1, приємно. Ви також можете використовувати if(arrayName[index] === 'undefined')як ярлик
AnchovyLegend

67
@AnchovyLegend ні, ви не можете! Але можна використовувати if(arrayName[index] === undefined).
Денис V

18
це не вдається, якщо предмет є, але значення не визначене; використовуйте замість цього відповідь -> stackoverflow.com/questions/1098040/…
Матус

як сказав @Matus, є більше пояснень тут , ви повинні бути інформовані про.
S.Thiongane

1
для if (arrayName [index] === undefined) ви можете використовувати ще коротший, який є, якщо (! arrayName [index])
Park JongBum

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

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

2
На жаль, цей не працює в IE 7 і нижче.
darksoulsong

4
Це, на мій погляд, найкраща відповідь, на сьогодні IE 7 вже не підтримується, тому це не проблема. Хоча я запропоную використовувати потрійні рівніif(myArray.indexOf(searchTerm) === -1)
Мауро Гава

2
ОП шукала, чи існує даний номер індексу . Це перевірка існування заданого значення .
jonathan.s

6

Хтось, будь ласка, виправте мене, якщо я помиляюся, але AFAIK відповідає дійсності:

  1. Масиви - це справді просто Об'єкти під кришкою JS
  2. Таким чином, вони мають метод-прототип, hasOwnProperty"успадкований" відObject
  3. під час мого тестування hasOwnPropertyможу перевірити, чи існує щось в індексі масиву.

Тож, поки зазначено вище, ви можете просто:

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

використання:

arrayHasIndex([1,2,3,4],4); Виходи: false

arrayHasIndex([1,2,3,4],2); Виходи: true


Це також працює для невизначених і нульових значень у масиві, що жоден з інших відповідей тут не робить.
Джейк Тхакур

Підтверджено з MDN: "Якщо об'єктом є масив, метод hasOwnProperty може перевірити, чи існує індекс." developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Лорен

3

Мені довелося загортати відповідь techfoobar у блок try..catch

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

... так воно і працювало в хромі, все одно (інакше код зупинився з помилкою).


Це повинно бути "зламане" з помилкою, якщо сама змінна arrayName(або index) не існувала. Просто доступ до невизначеного елемента масиву не повинен був призвести до "помилки"?
MrWhite

3

Якщо елементи масиву також є простими об'єктами або масивами, ви можете використовувати певну функцію:

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

some- це найсучасніший шлях тут. Він також може стати myArray.some(el => el.item === element.item && el.title === element.title)
vahdet

2

Розглянемо масив:

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

Якщо ви хочете перевірити, чи існує "name1" в а, просто протестуйте його за допомогою in:

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

5
"var a" - це не об'єкт масиву у вашому випадку, а звичайний об'єкт. Повинен бути var a = [...]. Я думаю, це саме те, що потрібно було автору.
томазахлін

3
Це як перевірити наявність ключа в об’єкті, а не наявність індексу в масиві.
Бен Халл


1

Якщо ви використовуєте underscore.js, то цей тип нульової та невизначеної перевірки прихований бібліотекою.

Так ваш код буде виглядати приблизно так -

var currentData = new Array();

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

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

return true;

Зараз це виглядає значно читабельніше.


Навіть якщо ваша відповідь правильна, я б просто про це подумав двічі. Ваш код стане underscore.js залежним лише для перевірки порожнього значення. Просто виконайте просту функцію обгортки isset (v) {return (typeof v! == 'undefined'); }
Героселохім

1

Простий спосіб перевірити, чи існує предмет чи ні

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

3
жахливо неефективна. що якщо я встановлю, myArray[1000000] = 'Pear'то ваша функція візьме назавжди.
Джон Генкель

1

На мою думку, цей спосіб найпростіший.

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

І, можливо, ще один спосіб це зробити.

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

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

Що ви очікуєте .. що це питання насправді?
Geeky

1

Якщо ви шукаєте щось подібне.

Ось наступний фрагмент

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


Це рішення, яке я зараз буду використовувати в своєму проекті. Я поняття не маю, чому з'явились зворотні сигнали - це найкраще підходить для мого випадку використання, а саме node.js / express на стороні сервера. Дякую
mkrufky

@mkrufky, оскільки це питання не для чого. ми давно мали можливість Array.includesперевірити, чи є значення масивом, наприклад demoArray.indexOf(ArrayIndexValue) !== -1. це питання стосується перевірки того, чи існує індекс у масиві, що зовсім інша проблема
r3wt

0

ви можете просто скористатися цим:

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

3
неправильно. що, якщо tmp = [0,0,0,0]тоді повинен існувати tmp [3]
Джон Генкель

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

Перевірте, чи не визначено другий елемент у масиві за допомогою typeofта перевірки наundefined


0

При спробі з'ясувати, чи існує індекс масиву в JS, найпростіший і найкоротший спосіб зробити це через подвійне заперечення.

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

0

Це саме те, для чого призначений inоператор. Використовуйте його так:

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

Загальноприйнятий відповідь неправильно, це дасть помилковий негативний результат, якщо значення на indexце 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!
}


0
const arr = []

typeof arr[0] // "undefined"

arr[0] // undefined

Якщо булевий вираз

typeof arr[0] !== typeof undefined

вірно, тоді 0 міститься в arr


0

Це також добре працює, перевіряючи тип на undefined.

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

Тест:

const fruits = ["Banana", "Orange", "Apple", "Mango"];

if (fruits["Raspberry"] === undefined){
  console.log("No Raspberry entry in fruits!")
}

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.