Shi*_*iva 3 javascript json multidimensional-array node.js javascript-objects
我试图从JSON对象中获取key的特定数组值,并将其存储在一个类似于此的数组中.
例:
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]}
}
Run Code Online (Sandbox Code Playgroud)
等等
现在我需要获取键"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]]
Run Code Online (Sandbox Code Playgroud)
但是,我尝试了多种方法将数组存储在数组中,但是当我打印列表时,我能够得到这样的结果
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
Run Code Online (Sandbox Code Playgroud)
您可以使用Object.keys(返回json的所有键的数组)与数组的映射相结合,将您的json转换为新数组:
const boxes = Object.keys(obj).map(key => obj[key].box)
Run Code Online (Sandbox Code Playgroud)
您也可以使用Object.values,在您的情况下实际上更好:
const boxes = Object.values(obj).map(value => value.box)
Run Code Online (Sandbox Code Playgroud)
Object.keys 返回一个数组:
Object.keys(obj) // ["1", "2", "3"]
Run Code Online (Sandbox Code Playgroud)
然后你可以映射它们以获得每个项目的值:
Object.keys(obj).map(key => obj[key]) // [{box: [...]}, {box: [...]}, {box: [...]}]
Run Code Online (Sandbox Code Playgroud)
然后在array.map回调中,你只需返回框值:
Object.keys(obj).map(key => obj[key].box) // [[...], [...], [...]]
Run Code Online (Sandbox Code Playgroud)
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))
Run Code Online (Sandbox Code Playgroud)
for...in可以遍历对象的属性,但它也会遍历继承的属性,因此我们需要保护循环object.hasOwnProperty(key).
Object.keys():返回一个对象的所有可枚举属性名称的数组
Object.values():返回一个对象的所有可枚举值的数组
array.map():返回一个新数组,其中包含在给定回调函数中转换的原始数组的每个项目
array.slice():返回原始数组的浅表副本
| 归档时间: |
|
| 查看次数: |
811 次 |
| 最近记录: |