簡體   English   中英

在javascript中將JSON對象轉換為數組數組

[英]Converting JSON object into array of arrays in javascript

我試圖從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]}
           } 

等等

現在我需要獲取鍵“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() :返回原始數組的淺表副本

嘗試這個:

Object.values(obj).map(x=>x.box);

 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]} } let list = Object.values(obj).map(x=>x.box); console.log(JSON.stringify(list)) 

Object.values返回obj值的數組,然后我們使用map迭代這些值(我們使用箭頭函數 )並使用box值創建新數組。

檢查下一個示例:

1)首先,使用Object.keys()獲取包含對象鍵的數組。

2)其次,循環每個key並訪問與每個鍵關聯的對象的box屬性,然后在新數組上推送此box屬性。

 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]} }; var arrayOfArrays = []; Object.keys(obj).forEach(function(k){ arrayOfArrays.push(obj[k].box); }); console.log(arrayOfArrays); 

這是(只是為了好玩)另一種使用reduce()方法的替代方法:

 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]} }; const reducer = (accumulator, currVal) => { accumulator.push(currVal.box); return accumulator; }; arrayOfArrays = Object.values(obj).reduce(reducer, []); console.log(arrayOfArrays); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM