我正在尝试使用 Javascript 从 JSON 对象创建一个数组。问题是我正在尝试获取数组形式的 acceptedAnswers。我认为 map 是最好的功能。然而,返回的是一个数组数组。我只想获取值数组。感谢您的帮助。
代码
let categories = [
{
"categoryID": "1",
"categoryName": "Fruits with seeds",
"acceptedAnswers": [
"2","5"
]
},
{
"categoryID": "2",
"categoryName": "Fruits without seeds",
"acceptedAnswers": [
"1","3","4"
]
},
{
"categoryID": "3",
"categoryName": "Blue Fruit",
"acceptedAnswers": [
"1"
]
}
]
JS
let catAcceptedAnswerArray = categories.map(function (cat) {
return cat.acceptedAnswers
})
console.log(catAcceptedAnswerArray)
返回:
0: ["2","5"]
1: ["1","3","4"]
2: ["1"]
我正在尝试返回:
0: ["2","5","1","3","4","1"]
这是一个fiddle
最佳答案
map
不是到达这里的正确工具。只需创建一个数组并将每个对象的条目附加到它:
const result = [];
for (const category of categories) {
result.push(...category.acceptedAnswers);
}
或者,如果您不能使用 ES2015+ 功能,ES5 版本:
var result = [];
categories.forEach(function(category) {
result.push.apply(result, category.acceptedAnswers);
});
这假设不会有成千上万的acceptedAnswers
;对 push
的单个调用具有特定于平台的限制(但同样,它们有数千个)。
像几乎所有的数组操作一样,可能将它硬塞进reduce
,但你不会从中得到任何东西:
var result = categories.reduce(function(arr, category) {
arr.push.apply(arr, category.acceptedAnswers);
return arr;
}, []);
关于javascript - 使用 map 函数从包含数组的对象创建一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51710221/