Перечисление значений в списке словарей

#javascript

#javascript

Вопрос:

 var dicList = [{
  student_id: 334,
  full_name: "student B",
  score: 9,
  class_id: 222
}, {
  student_id: 333,
  full_name: "student A",
  score: 7,
  class_id: 222
}]

for (var i = 0; i  ; i < dicList.length) {
  for (var key in dicList[i]) {
    if (test.hasOwnProperty(key)) {
      console.log(key, dicList[i][key]);
    }
  }
}
  

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

Комментарии:

1. Пожалуйста, опубликуйте ожидаемый результат. Что test в вашем коде?

2. Ваши аргументы цикла for расположены в неправильном порядке, и что test ?

3. for (var i = 0; i ; i < dicList.length) измените его на for (var i = 0; i < dicList.length; i ;) . И замените test на docList[i] .

Ответ №1:

Вы можете использовать flatMap() и Object.entries() и forEach() перебирать результирующий массив.

 Array.prototype.flatMap = function(f){
  return [].concat(...this.map(f))
}
var dicList = [{student_id: 334,  full_name: "student B",  score: 9,  class_id: 222}, {  student_id: 333,  full_name: "student A",  score: 7,  class_id: 222}]

const res = dicList.flatMap(Object.entries)
res.forEach(([key,value]) => console.log(`key:${key} value:${value}`));  

flatMap() работает не во всех браузерах, поэтому вы используете map() и создаете вложенные forEach()

 var dicList = [{student_id: 334,  full_name: "student B",  score: 9,  class_id: 222}, {  student_id: 333,  full_name: "student A",  score: 7,  class_id: 222}]

const res = dicList.map(Object.entries)
res.forEach(a => a.forEach(([key,value]) => console.log(`key:${key} value:${value}`)));
Array.prototype.flatMap = function(f){
  return [].concat(...this.map(f))
}  

Вы также можете создать полизаполнение для flatMap()

 if(!Array.prototype.flatMap){
  Array.prototype.flatMap = function(f){
    return [].concat(...this.map(f))
  }
}
  

Комментарии:

1. Object.entries является статическим, поэтому безопасно просто .flatMap(Object.entries)

2. Я бы предложил опубликовать полизаполнение для, flatMap например [].concat(...this.map(f)) , вместо вложенных циклов.

Ответ №2:

Вам необходимо

  • извлеките две последние части, condition и final-expression часть for инструкции, и

     for ([initialization]; [condition]; [final-expression])
        statement
      
  • проверьте dicList[1] вместо test .

 var dicList = [{ student_id: 334, full_name: "student B", score: 9, class_id: 222 }, { student_id: 333, full_name: "student A", score: 7, class_id: 222 }]

for (var i = 0; i < dicList.length; i  ) {     // move i   to the end
    for (var key in dicList[i]) {
        if (dicList[i].hasOwnProperty(key)) {  // use dicList[i] instead of test
            console.log(key, dicList[i][key]);
        }
    }
}  

Комментарии:

1. Мог бы также добавить, что if оператор отчасти бесполезен, поскольку for(var key in... никогда не будет перебирать что-то, что не является ключом текущего объекта.