说我有一个看起来像这样的对象......
values = {
'student': [{
'field': 'prefix',
'description': 'First name'
},
{
'field': 'suffix',
'description': 'Last name'
},
{
'field': 'student_email',
'description': 'Email address'
}],
'classes': [{
'field': 'course_code',
'description': 'Course code'
}]
}
我想要
['prefix', 'suffix', 'student_email', 'course_code']
所以这就是我所拥有的:
for (const v in values) {
v.map((obj, idx) => {
console.log(obj);
});
}
它只返回v.map is not a function
。我怎样才能做到这一点,我做错了什么? (用jsx编写)。
答案 0 :(得分:2)
你关闭了:
for(const v in values) {
values[v].map(obj => {
console.log(obj.field);
return obj.field;
});
}
values = {
'student': [{
'field': 'prefix',
'description': 'First name'
}, {
'field': 'suffix',
'description': 'Last name'
}, {
'field': 'student_email',
'description': 'Email address'
}],
'classes': [{
'field': 'course_code',
'description': 'Course code'
}]
};
for(const v in values) {
values[v].map(obj => {
console.log(obj.field);
return obj.field;
});
}

要将它们放入数组中,您可以执行以下操作:
var result = [];
for(const v in values) {
result = result.concat(values[v].map(obj => {
return obj.field;
}));
}
var values = {
'student': [{
'field': 'prefix',
'description': 'First name'
}, {
'field': 'suffix',
'description': 'Last name'
}, {
'field': 'student_email',
'description': 'Email address'
}],
'classes': [{
'field': 'course_code',
'description': 'Course code'
}]
};
var result = [];
for(const v in values) {
result = result.concat(values[v].map(obj => {
return obj.field;
}));
}
console.log(result);

答案 1 :(得分:1)
变量values
是一个对象,map()
依赖于它是一个数组,因为该函数是在Array.prototype
上定义的。
将变量更改为:
values = [
{
'student': [{
'field': 'prefix',
'description': 'First name'
},
{
'field': 'suffix',
'description': 'Last name'
},
{
'field': 'student_email',
'description': 'Email address'
}]
},
{
'classes': [{
'field': 'course_code',
'description': 'Course code'
}]
}
]
然后你可以在map
数组上使用values
,检索你需要的信息,例如,下面的内容应该让你映射每个值和每个子值:
for (const value in values) {
value.map((obj) => {
// should get two calls to the below, one for 'student' and one for 'classes'
obj.value.map((info) => {
// should result in 4 calls to log, printing all 'description' values
console.log(info['description']);
}
});
}