Нажмите размерный массив

Почему во втором примере ответ не определен?

// First
var arr = [
  [1, 4, 6],
  ['alex']
];
var newArr = arr[1];
newArr.push('Peter');
console.log(arr);

// Second
var arr = [
  [1, 4, 6],
  ['alex']
];
arr.push([1]['Peter']);
console.log(arr);

Что такое [1]['Peter']?

Anurag Srivastava 22.05.2019 11:11

В JS нет многомерных массивов, вы можете эмулировать только массивы с вложенными массивами.

Teemu 22.05.2019 11:12

Я пытаюсь поместить массив во вторую позицию и добавить имя «Питер»!

Don_Huan 22.05.2019 11:13

Вы должны сделать arr[1].push('Peter') тогда.

mgarcia 22.05.2019 11:16
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Сравнение структур данных: Массивы и объекты в Javascript
Сравнение структур данных: Массивы и объекты в Javascript
Итак, вы изучили основы JavaScript и хотите перейти к изучению структур данных. Мотивация для изучения/понимания Структур данных может быть разной,...
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
Приложение для отслеживания бюджета на React js для начинающих
Приложение для отслеживания бюджета на React js для начинающих
Обучение на практике - это проверенная тема для достижения успеха в любой области. Если вы знаете контекст фразы "Практика делает человека...
Стоит ли использовать React в 2022 году?
Стоит ли использовать React в 2022 году?
В 2022 году мы все слышим о трендах фронтенда (React, Vue), но мы не знаем, почему мы должны использовать эти фреймворки, когда их использовать, а...
1
4
440
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Код [1]['Peter'] пытается получить доступ к ключу с именем Peter из литерала массива [1]. И это undefined

Ваш код эквивалентен этому:

var arr = [
  [1, 4, 6],
  ['alex']
];

var tempArray = [1];
var tempValue = tempArray['Peter'] // undefined

arr.push(tempValue);
console.log(arr);

Вы должны изменить его на: arr[1].push('Peter')

Проблема в

arr.push([1]['Peter']);

Но массив, содержащий один элемент 1, не обладает свойством Peter. Массивы обычно не имеют нечисловых свойств (кроме свойств на Array.prototype и Object.prototype)

Все, что вам нужно сделать, это

var arr = [
  [1, 4, 6],
  ['alex']
];
arr[1].push('Peter');
console.log(arr);

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

ADyson 22.05.2019 11:17

Я ошибочно понял, что его "вторая позиция" - это второй индекс в массиве. Позвольте мне исправить это

Hannan 22.05.2019 11:26

хорошо, что лучше. Теперь вам, вероятно, следует добавить объяснение, иначе вы только что создали тот же код, что и другие ответы, но без объяснения причин. Это делает другие ответы лучше, потому что они имеют дополнительный полезный контент. Работающий код — это здорово, но он не так полезен, если мы не можем учиться на нем.

ADyson 22.05.2019 11:45

Этот синтаксис [1]['Peter'] не делает того, что вы можете себе представить. Вы передаете входной параметр. Он не ссылается на массив, в который его вталкивает, он полностью независим. Таким образом, вы фактически говорите JavaScript сначала создать новый массив ([1]), а затем попытаться получить доступ к индексу под названием «Питер» из него (["Peter"]), а затем поместить его в следующий свободный индекс в arr. Очевидно, что в новом массиве индекса «Питер» не существует, поэтому он выводит undefined.

Вместо этого вам нужно было бы написать это так, чтобы он помещался в существующий массив, который сам находится в индексе 1 из arr:

// First
var arr = [
  [1, 4, 6],
  ['alex']
];
var newArr = arr[1];
newArr.push('Peter');
console.log(arr);

// Second
var arr = [
  [1, 4, 6],
  ['alex']
];
arr[1].push('Peter');
console.log(arr);

Другие вопросы по теме