javascript - 将JSON对象转换为javascript中的数组数组

标签 javascript node.js json multidimensional-array javascript-objects

我尝试从 JSON 对象中获取键的特定数组值并将其存储在一个如下所示的数组中。

示例:

var obj = { "1":{"class":2,"percent":0.99,"box":[0.2,0.3,0.4,0.5]},
            "2":{"class":2,"percent":0.99,"box":[0.12,0.23,0.45,0.56]},
            "3":{"class":2,"percent":0.99,"box":[0.52,0.83,0.34,0.59]}
           } 

以此类推

现在我需要获取键“box”的值并将其存储在一个数组中。

var list = []
list = [[0.2,0.3,0.4,0.5],[0.12,0.23,0.45,0.56],[0.52,0.83,0.34,0.59]]

但是,我尝试了多种方法将数组存储在数组中,但是当我打印列表时我可以得到这样的结果

list = 0.2,0.3,0.4,0.5,0.12,0.23,0.45,0.56,0.52,0.83,0.34,0.59

最佳答案

你可以使用 Object.keys(它返回你的 json 的所有键的数组)结合数组的映射来将你的 json 转换成一个新的数组:

const boxes = Object.keys(obj).map(key => obj[key].box)

您还可以使用 Object.values,这在您的情况下实际上更好:

const boxes = Object.values(obj).map(value => value.box)

工作原理

Object.keys返回一个数组:

Object.keys(obj) // ["1", "2", "3"]

然后您可以映射它们以获取每个项目的值:

Object.keys(obj).map(key => obj[key]) // [{box: [...]}, {box: [...]}, {box: [...]}]

然后在array.map的回调,你可以简单地只返回框值:

Object.keys(obj).map(key => obj[key].box) // [[...], [...], [...]]

没有 Object.keys()

function getBoxes (object) {
  var boxes = [];
  for (var key in object) {
    if (!object.hasOwnProperty(key)) continue;
    boxes.push(object[key].box);
  }
  return boxes;
}

console.log(getBoxes(obj))

for...in可以遍历对象的属性,但它也会遍历继承的属性,因此我们需要用 object.hasOwnProperty(key) 来保护循环.


Object.keys() : 返回一个对象的所有可枚举属性名的数组

Object.values() : 返回一个对象的所有可枚举值的数组

array.map() : 返回一个新数组,原始数组的每一项在给定的回调函数中转换

array.slice() : 返回原始数组的浅拷贝

关于javascript - 将JSON对象转换为javascript中的数组数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53862005/

相关文章:

node.js - 在 Express 中将缓冲区流式传输到客户端

javascript - 带有正则表达式的 jquery .replace() 阻止选择输入的所有值

javascript - JQuery 在无序列表中查找下一个类

javascript - 如何在访问者退出网站时弹出

java - 将 JSONObject/JSONArray 转换为字符串数组时出现问题

java - 如何格式化 json 字符串?

javascript - 在JS中记录HTTP请求的字节大小

javascript - 我可以使用 'input' 和类型 'time' 来显示小时而不是分钟吗?

node.js - Electron PDF 查看器

javascript - 如何添加类型以在 Node v12 中使用 Intl.ListFormat