ассоциативный массив установлен неправильно

0

Я новичок в javascript и jquery, и мне было интересно, может ли кто-нибудь меня подтолкнуть, почему это работает неправильно.

У меня есть раскрывающийся список, из которого пользователь выбирает значение, а затем "Процессы". При обработке значение раскрывающегося списка, а также текстового поля сохраняется в массиве. Я хочу, чтобы пользователь смог затем в основном сохранить те же раскрывающийся список и текстовые данные в массиве, но теперь в новой паре значений.

Первым хранилищем будет TestArray [0] [0] = "Значение текстового поля"

Если "Обработать" снова, это будет TestArray [1] [0] = "Значение текстового поля",

таким образом я могу проанализировать позже и указать, сколько раз пользователь "Обработал" раскрывающийся выбор;

var oneClickReport = $("#reportName").val();
    if(oneClickReport == "Sample Report One"){
        var arrayOneCount = reportOneArray.length;
        var totalHouseholds = 0;
            $("#reportChecks span:visible").each(function(){            
                if($(this).find(':checkbox').prop('checked')){
                    var HHName = $(this).text();
                    reportOneArray.push(HHName);
                    arrayTest[arrayOneCount][totalHouseholds] = HHName;
                }
            totalHouseholds += 1;
            });
            for(i = 0; i < arrayOneCount; i+=1){
                alert(arrayTest[0][i]);
            }
    }

Но когда вы пытаетесь "Обработать" во второй раз, я получаю ошибку;

SCRIPT5007: Unable to set property '0' of undefined or null reference 

онлайн;

arrayTest[arrayOneCount][totalHouseholds] = HHName;
Теги:
arrays
asp-classic
associative-array

2 ответа

1

Вам нужно инициализировать массив. Я не уверен, что именно вы хотите сделать, но вам нужен такой массив

var arrayTest = []

И вам нужно будет инициализировать последующее значение, например

arrayTest[1] = []

Затем вы можете получить доступ к вашему массиву

arrayTest[1][0] = []

Я сделал вам пример

var oneClickReport = $("#reportName").val();
var arrayTest = [] # You may need to put this elsewhere
if(oneClickReport == "Sample Report One"){
    var arrayOneCount = reportOneArray.length;
    var totalHouseholds = 0;
        $("#reportChecks span:visible").each(function(){            
            if($(this).find(':checkbox').prop('checked')){
                var HHName = $(this).text();
                reportOneArray.push(HHName);

                if(!arrayTest[arrayOneCount]){ arrayTest[arrayOneCount] = []; }

                arrayTest[arrayOneCount][totalHouseholds] = HHName;
            }
        totalHouseholds += 1;
        });
        for(i = 0; i < arrayOneCount; i+=1){
            alert(arrayTest[0][i]);
        }
}
  • 0
    Большое спасибо за ваш ответ, я думаю, что почти получил его. Одна вещь, с которой я столкнулся, о которой я определенно не думал, - это то, что если пользователь изначально выбирает более 1 флажка для добавления, значение arrayOneCount не будет равно 1, но сколь угодно много было выбрано. Есть ли способ для меня, чтобы просто проверить, был ли инициализирован и заполнен arrayTest [0] или arrayTest [1] и т. д.? Я действительно просто хочу что-то вроде того, если пользовательский процесс «Report One» в первый раз хранится в arrayTest [0] для всех выбранных флажков, а затем, если они снова обрабатывают arrayTest [1] и т. Д. Еще раз спасибо
  • 0
    Вы можете получить это с помощью свойства length массива. if (arrayTest [arrayOneCount] .length> 0) {#Что-то есть в arrayTest [arrayOneCount]} else {# В arrayTest [arrayOneCount] нет ничего
0

ваша проблема с var arrayOneCount = reportOneArray.length; и вы не меняете это значение

  • 0
    значение будет увеличиваться при каждом вызове функции. Он пересчитает новые значения, которые были добавлены в массив, и обновит таким образом

Ещё вопросы

Сообщество Overcoder
Наверх
Меню