Задать вопрос
@Xsader

Почему метод array.push в цикле while не добавляет значения в массив?

Почему в этом случае:
var a =[]
var tns = [{type: 1}, {type: 2}] // может быть больше двух объектов, ниже необходимо вывести все
var i = 0
while(tns[i] == !undefined){a.push([i]['type']); i++} //вывод всех значений type массива с объектами
console.log(a)

console.log выводит пустой массив, и как реализовать задуманное?
  • Вопрос задан
  • 2803 просмотра
Подписаться 1 Простой 4 комментария
Решения вопроса 3
rockon404
@rockon404
Frontend Developer
const a = tns.map(el => el.type);

По вашему коду:
1. Условие tns[i] == !undefined возвращает false
2. Выражение [i]['type'] возвращает undefined.
Ответ написан
devellopah
@devellopah
попробуй так
while(i < tns.length){a.push(tns[i]['type']); i++}
Ответ написан
AlexanderBaranchugov
@AlexanderBaranchugov
Я такой
1. Условие в цикле у тебя не верное. Получается что ты сравниваешь элемент массива с!undefined
Для твоего случая правильно условие было бы такое: tns[i] !== undefined.
НО! Следует учитывать, что в середине массива могут встречать empty Элементы

2. Посмотри что ты добавляешь в массив a
правильно будет так: a.push(tns[i]['type']
в частности пропустил tns
[i]['type'] = получить свойство type массива [i]

3. Я бы сократил этот кусок кода до следующего:
a = tns.map( ({type}) => 
  type
);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@choupa
Архитектор (обычный, который строит)
Параметр цикла i где-то строчный, где-то заглавной буквой. В JS это разные идентификаторы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы