Получить не неопределенные элементы из массива в javascript ES5 - PullRequest
0 голосов
/ 04 июля 2019

Я получаю список элементов со стороны сервера в формате JSON и сохраняю их в массиве javascript.Список элементов, полученных с сервера, может содержать повторяющиеся элементы, но мне нужно, чтобы массив javascript содержал только уникальные элементы.

Для этого я использую поле id из каждого элемента (целочисленное значение) в качестве индекса массива, чтобы я мог проверить, есть ли элемент в массиве, проверивзначение массива в этой позиции.

Из-за этого результирующий массив может содержать только элементы с индексами 0 и 5 (просто пример), и я сталкиваюсь с проблемами при его итерации с помощью метода $.each() jQuery, потому что он пересекает каждую позицию массива изОт 0 до 5, undefined значения в позициях 1-4.

Конечно, я могу просто проверить, что элемент не является неопределенным при прохождении, но я хотел бы знать, есть ли какой-нибудь нативный или простой способ получить значения массива из тех позиций, которые не определены.

var x = [];
x[0] = "some value";
x[5] = "another value";

$.each(x, function(index, value) {
   console.log(index + " - " + value);    
});

// This results in:
// 0 - some value
// 1 - undefined
// 2 - undefined
// 3 - undefined
// 4 - undefined
// 5 - another value

Я также принимаю предложения выполнить этот процесс по-другому, вместо того, чтобы использовать идентификатор элемента в качестве индекса массива для проверки уникальности.

Ответы [ 2 ]

2 голосов
/ 04 июля 2019

Используйте объект вместо:

var x = {};
x[0] = "some value";
x[5] = "another value";

$.each(x, function(key, value) {
  console.log(key + " - " + value);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
1 голос
/ 04 июля 2019

Просто используйте собственный массив forEach, который пропускает несуществующие записи:

var x = [];
x[0] = "some value";
x[5] = "another value"
x.forEach(function(value, index) {
    console.log(index + " - " + value);
});

Обратите внимание, что порядок параметров обратного вызова обратный.

Если вы действительно хотите использовать $.each, проверьте, несвойство существует:

var x = [];
x[0] = "some value";
x[5] = "another value"
$.each(x, function(index, value) {
    if (x.hasOwnProperty(index)) {
        console.log(index + " - " + value);
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...