[英]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) // [[...], [...], [...]]
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.