Будет ли это работать для проверки, существует ли значение в позиции «индекс» или нет, или есть лучший способ:
if(arrayName[index]==""){
// do stuff
}
javascript
arrays
Анкур
источник
источник
Ответы:
Концептуально массивы в JavaScript содержат
array.length
элементы, начиная сarray[0]
вплоть доarray[array.length - 1]
. Элемент массива с индексомi
определен как часть массива, если онi
находится между0
иarray.length - 1
включительно. Если я не в этом диапазоне, его нет в массиве.Таким образом, по своей концепции массивы являются линейными, начиная с нуля и заканчивая максимумом, без какого-либо механизма для наличия «пробелов» внутри того диапазона, где нет записей. Чтобы узнать, существует ли значение в данном индексе позиции (где индекс равен 0 или положительному целому числу), вы буквально просто используете
Теперь под капотом движки JavaScript почти наверняка не будут распределять пространство массива линейно и непрерывно, как это, поскольку это не имело бы большого смысла в динамическом языке и было бы неэффективно для определенного кода. Вероятно, это хеш-таблицы или какая-то гибридная смесь стратегий, а неопределенные диапазоны массива, вероятно, не выделяются в их собственной памяти. Тем не менее, язык JavaScript хочет представить массивы
array.length
n как имеющие n членов, и они имеют имена от 0 до n - 1 , и все в этом диапазоне является частью массива.Однако, вероятно, вам нужно знать, действительно ли значение в массиве определено , то есть нет
undefined
. Может быть, вы даже хотите знать, если это определено и нетnull
. Можно добавлять члены в массив, даже не устанавливая их значения: например, если вы добавляете значения массива путем увеличенияarray.length
свойства, любые новые значения будутundefined
.Чтобы определить, является ли данное значение чем-то значимым или было определено. То есть нет
undefined
илиnull
:или
Интересно, что из-за правил сравнения JavaScript мой последний пример может быть оптимизирован до следующего:
источник
length
свойство, и в этом случае более поздние два примера являются более подходящими.foo !== 'undefined' && foo !== null
простоfoo != null
0
toarray.length - 1
. Не все из этих значений будут определенными значениями. Если вы используете ключевое слово delete в элементе массива, оно вернет этот элемент обратно неопределенным, как если бы вы расширяли массив путем увеличения его параметра array.length, новые значения начинаются как неопределенные. В действительности реализации Javascript, вероятно, оптимизируют хранение массива, и некоторые или все неопределенные значения могут не занимать память.new Array(1)[0] === undefined
но значение пусто.[undefined][0] === undefined
но значение установлено; массив имеет значение. Единственный идеальный ответ , используяin
илиhasOwnProperty()
-idx in array
илиarray.hasOwnProperty(idx)
: --per этот ответ stackoverflow.com/a/39171620/3120446Разве мы не можем просто сделать это:
источник
if(arrayName.length) {...
какая-то разница?if(arrayName.length) {...
терпит неудачуnull
[undefined, undefined]
массивом с длиной = 2.Использование только
.length
не является безопасным и приведет к ошибке в некоторых браузерах. Вот лучшее решение:или мы можем использовать:
источник
источник
источник
x == null
будет когда-либо только для нуля или неопределенного, ничего больше. Точно так жеx != null
будет верно для всего, что не является ни нулевым, ни неопределенным. Если вам специально не нужно искать неопределенное, просто склоняйтесь к неявной доброте преобразования.Краткий и универсальный подход
Если вы хотите проверить любой массив, если он имеет ложные значения (например, false, undefined, null или пустые строки), вы можете просто использовать метод each () следующим образом:
Например:
Если вам нужно получить первый индекс ложного значения, вы можете сделать это следующим образом:
Если вам просто нужно проверить ложное значение массива для заданного индекса, вы можете просто сделать это так:
источник
Если вы имеете в виду «Null» -> его элементы равны нулю или равны «», в этом случае: проверьте, не пуст ли массив после фильтрации всех «нулевых» элементов
Конечно, добавьте метод Clean перед:
источник
Я бы порекомендовал создать такую функцию:
Вы могли бы назвать это так:
Принуждение разработчика придерживаться интерфейса isEmptyEl обнаружит ошибки ввода, такие как неопределенные переменные arrayName или indexVal.
(Обычно рекомендуется программировать в обороне при программировании на Javascript.)
Вы бы получили ошибку, как это, если arrayName не было определено:
Подобные результаты для неопределенного indexVal.
Вы получаете ошибку, если значения массива или индекса не существуют.
Для правильного ввода вы получите значение true, только если arrayName [indexVal]:
источник
Это зависит от того, что вы имеете в виду под «пустым».
Когда вы пытаетесь получить значение свойства объекта, у которого нет свойства с таким именем, вы получите значение
undefined
.Вот что происходит с разреженными массивами: не все индексы существуют
0
иarray.length-1
существуют.Так что вы можете проверить, если
array[index] === undefined
.Однако свойство
index
может существовать соundefined
значением. Если вы хотите отфильтровать этот случай, вы можете использоватьin
оператор илиhasOwnProperty
, как описано в разделе Как проверить, есть ли у объекта свойство в JavaScript?Если вы хотите считать существующее свойство со значением
undefined
илиnull
несуществующим, вы можете использовать свободное сравнениеarray[index] == undefined
илиarray[index] == null
.Если вы знаете, что массив не редкий, вы можете сравнить
index
сarray.length
. Но для безопасности вы можете убедиться, что этоindex
действительно индекс массива, см. Проверка, если имя свойства является индексом массива.источник
Хорошо, давайте сначала посмотрим, что произойдет, если значение массива не существует в JavaScript, поэтому, если у нас есть массив, как показано ниже:
и теперь мы проверяем, есть ли 6 с индексом 5 или нет:
и мы получаем
undefined
...Таким образом, это в основном дает нам ответ, лучший способ проверить, не определено ли что-то вроде этого:
В этом случае лучше НЕ делать этого:
Потому что представьте, у нас есть этот массив:
и мы делаем:
Итак, как вы видите, даже 0 есть, он не распознается, есть несколько других вещей, которые могут сделать то же самое и сделать ваше приложение глючным, поэтому будьте осторожны, я перечислю их все:
undefined
''
источник
Я хотел бы отметить кое-что, что некоторые, кажется, упустили: а именно, возможно иметь «пустую» позицию массива в середине вашего массива. Учтите следующее:
Тогда естественным способом проверки было бы определить, является ли член массива неопределенным, я не уверен, существуют ли другие способы.
источник
попробуйте это, если массив [индекс] является нулем
источник
С Lodash вы можете сделать:
if(_.has(req,'documents'))
это проверить, имеет ли наш объект запроса свойство с именем,documents
и если у него есть этот реквизит, следующееif (req.documents.length)
- проверить, не является ли он пустым массивом, чтобыforEach
можно было продолжить другие подобные вещи.источник
Чтобы проверить, был ли он никогда не определен или был удален:
также работает с ассоциативными массивами и массивами, где вы удалили некоторый индекс
Чтобы проверить, не было ли оно никогда не определено, было ли удалено ИЛИ пустое или логическое пустое значение (NaN, пустая строка, false):
источник
Я столкнулся с этой проблемой, используя данные Laravel. Я сохранял значение JSON, вызываемое
properties
в журнале активности, и хотел показать кнопку, основанную на том, что это значение пустое или нет.Что ж, datatables интерпретировал это как массив, если он был пустым, и как объект, если это не так, поэтому мне помогло следующее решение:
У объекта нет свойства длины.
источник
Я думаю, что это решение подходит для парней, которые предпочитают декларативное функциональное программирование, а не императивное ООП или процедурное. Если ваш вопрос « Есть ли какие-то значения внутри? (Истинное или ложное значение)», вы можете использовать
.some
метод для проверки значений внутри.function isEmpty(arr) { ... }
.[].length
результате0
чего в некоторых случаях это опасно.[].length > 0
поговорка "Его длина больше нуля?"Расширенные примеры:
источник
Вы можете использовать библиотеку Loadsh, чтобы сделать это более эффективно, например:
если у вас есть массив с именем "pets", например:
Чтобы проверить все значения массива на нулевые или неопределенные значения:
Проверьте больше примеров в http://underscorejs.org/
источник
fn(){}
является синтаксической ошибкой, и не совсем понятно, как это помогает проверить, существует ли элемент массива по определенному индексу или нет.