Почему я получаю неопределенные записи в следующем коде JavaScript

1

Итак, ниже мой код javascript

const rData = [[{"prop11": 10}, {"prop2": 12}]];
       const tData = [];
       const tddData = [];
       for(const item of rData[0]){
         tData.push(Object.keys(item).toString());
         console.log('trData...', tData);
         tData.map(y => {
           tddData.push(item[y]);
           console.log('tdDta....', tddData);
         });
       }

Ниже приводится вывод console.logs

trData... Array [ "prop11" ] 
tdDta.... Array [ 10 ] 
trData... Array [ "prop11", "prop2" ] 
tdDta.... Array [ 10, undefined ] 
tdDta.... Array [ 10, undefined, 12 ]

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

Теги:
ecmascript-6
arrays

1 ответ

0
Лучший ответ

На второй итерации цикла for item равен {"prop2": 12} а tData - ["prop11", "prop2"]. Когда вы вызываете tData.map(), вы делаете:

tddData.push(item["prop11"]);
tddData.push(item["prop2"]);

Поскольку нет item["prop11"], вы получите undefined для него.

tData содержит ключи от всех предыдущих объектов в массиве, поэтому вы получите undefined если у более позднего объекта нет этих предыдущих ключей.

Кроме того, если какой-либо объект имеет несколько свойств, Object.keys(item).toString() будет списком ключей, разделенных запятыми. Например, если у вас есть

{"key1": 1, "key2": 3}

вы нажмете "key1,key2" на tdData. Когда вы попытаетесь использовать это в item[y], вы получите undefined.

  • 0
    Я просто хотел знать причину. Хотел избавиться от этих неопределенных из окончательного массива tddData, мог бы использовать другой метод и сделать это, но хотел бы знать причину, чтобы избежать этого в первую очередь. Вы сделали это. Благодарю.

Ещё вопросы

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