#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...
никогда не будет перебирать что-то, что не является ключом текущего объекта.