Как проверить, существует ли элемент массива в JavaScript или нет?


199

Я работаю с 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

Ответы:


383

использование 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, есть больше объяснений здесь , вы должны быть осведомлены о.
Тионган

1
для if (arrayName [index] === undefined) вы можете использовать еще более короткий, который является if (! 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 */ }

... в любом случае это работает в chrome (в противном случае код остановился с ошибкой).


Это должно было произойти с ошибкой, только если сама переменная 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)
вахдет

2

Рассмотрим массив:

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

Если вы хотите проверить, существует ли name1 в a, просто протестируйте его 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'); }
Heroselohim

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 содержится в обр


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.