Двумерный массив - arr [i] [0] дает неверный результат - JavaScript ASP.NET C # - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть массив массивов, заполненный из C # Модель:

var AllObjectsArray = [];
        @foreach(var Cobject in Model.ObjectList) 
        {
            @:AllObjectsArray.push(new Array("@Cobject.Name", "@Cobject.Value", "@Cobject.Keyword"));
        }

var SelectedObjects = [];
        uniqueobj.forEach(function (element) {

            SelectedObjects.push(new Array(AllObjectsArray.filter(elem => elem[0] === element))); //makes array of selected objects with their values(name,value,keyword)
        });

Я пытаюсь получить второй параметр каждого внутреннего массива и добавить его в новый массив, содержащий такие элементы, как это:

var ValuesArray = [];
        for (i = 0; i < SelectedObjects.length; i++) {
            ValuesArray.push(SelectedObjects[i][0]) //problem here i think
        };

К сожалению, на:

alert(ValuesArray + " : " + SelectedObjects);

Я ничего не получу за ValuesArray. Другие данные для SelectedObjects загружаются правильно, все три параметра правильно возвращаются для каждого внутреннего массива, поэтому они не пусты. Я, должно быть, ошибаюсь.

EDIT: Еще больше информации, так как я не понимаю, что мне нужно.

Допустим, SelectedObjects [] содержит две записи, подобные этой:

{ name1, number1, keyword1}
{ name2, number2, keyword2}

Теперь мне нужно заполнить ValuesArray nane1 и name2. Вот почему я угадал, что мне нужно перебрать SelectedObjects и получить SelectedObject[i][0], где в моем угадывании i обозначает индекс внутреннего массива, а 1 обозначает числовую часть этого внутреннего массива. Пожалуйста, поправьте меня и поставьте меня в правильном направлении, так как я догадываюсь из C # способа кодирования, как обернуть мою голову вокруг JS

Однако SelectedObject [i] [0] дает мне весь SelectedObject со всеми тремя свойствами (имя, значение и ключевое слово), и я должен получить только часть имени внутреннего массива.

Что здесь происходит?

Надеюсь, на этот раз я объяснил себя лучше.

EDIT:

Мне кажется, я знаю, почему это происходит, поскольку SelectedObjects [i] [0] возвращает весь внутренний массив, а SelectedObjects [i] [1] возвращает ноль, это должно означать, что SelectedObjects не является массивом массивов, а массивом строк, соединенных с запятые.

Есть ли способ обойти это? Можно ли создать массив массивов по-разному или разделить внутренний объект по запятым и повторить возвращаемые строки?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

В этом фрагменте

var ValuesArray = [];
for (i = 0; i < SelectedObjects.length; i++) {
   ValuesArray.push(SelectedObjects[i][1]) //problem here i think
};

Вы указываете прямо на второй элемент в SelectedObjects [i]

Может быть, вы хотите первый индекс, 0

0 голосов
/ 09 апреля 2019

Во-первых, SelectedObjects [i] [1] должны быть SelectedObjects [i] [0].Но, насколько я понимаю, вы хотите что-то вроде

var ValuesArray = [];
for (let i = 0; i < SelectedObjects.length; i++) {
    for(let j = 0; j <SelectedObjects[i].length; j++) {
         ValuesArray.push(SelectedObjects[i][j]);
    }
};
...