在javascript中将JSON对象转换为数组数组

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)

Der*_*yen 6

您可以使用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)

没有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))
Run Code Online (Sandbox Code Playgroud)

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


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

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

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

array.slice():返回原始数组的浅表副本