我尝试从 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/