Javascript. Добавление массивов в объект - PullRequest
0 голосов
/ 09 мая 2018

Я решил Задача 16 без проблем. Я также нашел ответ для Challenge 17 , но я не понимаю, почему я могу использовать только квадратные скобки для добавления свойства в объект, как это: loopNumbers[nestedArr[i][0]] = nestedArr[i][1]

Итак, мои вопросы:

  1. Почему я не могу использовать точечную запись, подобную этой ?: loopNumbers.nestedArr[i][0] = nestedArr[i][1]
    Если я использую точечную нотацию, то она говорит Type Error on line 120: Cannot read property '0' of undefined
  2. Почему мне не нужно ставить точку с запятой после строки кода loopNumbers[nestedArr[i][0]] = nestedArr[i][1]?

Ниже приведены задачи.


Задача 16

Вам предоставляется пустой массив с именем nestedArr. Используя цикл for, добавьте 5 вложенных массивов к nestedArr, причем каждый вложенный массив содержит строку 'loop', конкатенированную с соответствующим индексом в nestedArr в качестве первого элемента, и просто индекс в качестве второго элемента. Пример подмассива - ['loop3', 3]

My answer:

let nestedArr = [];
for(let i=0; i<5; i++){
  nestedArr.push(['loop'+i, i]);
}
console.log(nestedArr);

Задача 17

Создайте переменную с именем loopNumbers и инициализируйте ее в пустой литерал объекта. Используя цикл for, выполните итерацию по nestedArr из предыдущего вызова. Для каждой итерации вашего цикла присвойте новое свойство loopNumbers, где имя свойства - это первый элемент в каждом вложенном массиве в nestedArr, а значение - второй элемент.

My answer:

let loopNumbers = {};
for (let i = 0; i < nestedArr.length; i++) {
       loopNumbers[nestedArr[i][0]] = nestedArr[i][1]
   }
console.log(loopNumbers);

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

РЕДАКТИРОВАТЬ: несколько раз я использую «получить», когда это больше «доступ» или «рассмотреть». Так что да, я говорю «получить эту вещь», и я не обязательно имею в виду читать ее значение, но вместо этого «мы здесь что-то делаем». Просто катись с этим хорошо?

В js доступ к массивам осуществляется как «получить запись в index из array»:

array[index]

и объекты доступны как "получить свойство с именем property из object":

object.property
object["property"]

что вы пытаетесь сделать, это "получить свойство из object, названное записью index из array". Это то, что вы можете сделать. Но на самом деле вы просили что-то немного другое.

loopNumbers.nestedArr[i][0] означает"получить свойство nestedArr от объекта loopNumbers и от этого получить запись по индексу i и от этой записи получить по индексу 0.

чтобы получить свойство loopNumbers, названное 0 -й записью i -ой записи nestedArr, вы должны начать с получения i -ой записи nestedArr

nestedArr[i]

И тогда вы хотите запись 0

nestedArr[i][0]

Теперь это не свойство, которое вы можете просто использовать напрямую, потому что, как уже было сказано, loopNumbers.nestedArr пытается получить свойство с именем nestedArr от объекта loopNumbers, который не существует. Единственный способ получить свойство, названное значением, хранящимся в nestedArr[i][0], из объекта с именем loopNumbers, заключить в квадратные скобки как

loopNumbers[nestedArr[i][0]]
0 голосов
/ 09 мая 2018

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

Для добавления свойства вы можете использовать точку, если аргумент является статическим, например:

loopnumbers.myproperty = 3

Но поскольку nestedArr[i][0] не является статичным, вам необходимо поставить скобки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...