javascript - 使用 map 函数从包含数组的对象创建一个数组

标签 javascript arrays

我正在尝试使用 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/

相关文章:

javascript - 更改方向时无法清除间隔或超时

javascript - 在 JavaScript 中,我可以以编程方式为文件输入元素触发 "click"事件吗?

php - 在 array_walk() 的回调函数中删除行

javascript - array.include 是否适用于嵌套对象

javascript - 带工厂的 Angular Testing Controller

javascript - 提交表单时关闭 Bootstrap 模式

javascript - .js 的 creatWriteStream 问题

c++ - 静态常量数组在 MSVC 中动态初始化?

java - 添加数组中的数字序列并打印第 n 个数字

c++ - 数组作为指针传递的不明确重载