У меня есть массив объектов javascript, содержащий около 6300 элементов.
Я пытаюсь использовать jQuery для итерации этих элементов и создания списков параметров для нескольких раскрывающихся списков, которые можно использовать для фильтрации этих 6300 элементов.
В Firefox это работает без проблем, но в IE я получаю сообщение о том, что скрипт работает медленно. Я играл с кодом, пытаясь получить набор данных, не вызывая ошибку IE, но пока мне не повезло. Ниже приведены методы, которые я уже попробовал:
Использование «indexOf» для создания отдельного списка «Юрисдикций».
var arrayJurisdiction = dataSet.filter(function (item, i, a) {
return i.Jurisdiction == a.indexOf(item.Jurisdiction);
});
Перебирая каждый элемент, проверяя, существует ли значение во вторичном массиве, а если нет, то добавляем его.
g$.each(dataSet, function (key, value) {
var matchingJurisdiction = arrayJurisdiction.filter(function (item) {
return value.Jurisdiction == item;
})[0];
if (matchingJurisdiction == null) {
arrayJurisdiction.push(value.Jurisdiction);
}
});
Оба эти метода приводят к тому, что IE выдает ошибку из-за слишком медленного выполнения скрипта. Есть ли более быстрый способ сделать это?
* EDIT ***
Исходя из приведенных ниже отзывов, я изменил метод, используемый для циклов вместо .each () и .filter (), но я все еще получаю сообщение «Остановить этот скрипт?» диалог в IE.
Вот пересмотренный код, использующий циклы for. Кроме того, я включил все фильтры, которые пытаюсь заполнить (не только первый).
for (var i = 0; i < dataSet.length; i++) {
var value = dataSet[i];
var matchingJurisdiction = null;
for (var i = 0; i < arrayJurisdiction.length; i++) {
var item = arrayJurisdiction[i];
if (item == value.Jurisdiction) {
matchingJurisdiction == item;
break;
}
}
if (matchingJurisdiction == null) {
arrayJurisdiction.push(value.Jurisdiction);
}
var valueYear = new Date(value.Treatment_Date).getFullYear();
var matchingYear = null;
for (var i = 0; i < arrayYear.length; i++) {
var item = arrayYear[i];
if (item == valueYear) {
matchingYear == item;
break;
}
}
if (matchingYear == null) {
arrayYear.push(valueYear);
}
var matchingProjectClass = null;
for (var i = 0; i < arrayProjectClass.length; i++) {
var item = arrayProjectClass[i];
if (item == valueYear) {
matchingProjectClass == item;
break;
}
}
if (matchingProjectClass == null) {
arrayProjectClass.push(value.Project_Classification);
}
var matchingImprovementType = null;
for (var i = 0; i < arrayImprovementType.length; i++) {
var item = arrayImprovementType[i];
if (item == valueYear) {
matchingImprovementType == item;
break;
}
}
if (matchingImprovementType == null) {
arrayImprovementType.push(value.Improvement_Type);
}
}