2017-10-17 73 views
0

創建對象我有一個JSON對象,它是類似於下面:使用頭JSON從JSON

vehicles: 
{ 
    trucks: [ 
     "Ford", 
     "Toyota", 
     "Dodge", 
    ], 
    suvs: [ 
     "Honda", 
     "GMC", 
    ], 
    cars: [ 
     "Pontiac", 
     "Lotus", 
     "Aston-Martin", 
     "Porsche", 
     "Subaru" 
    ] 
} 

我想遍歷這個和創建自己的對象,但我不能找出如何做它不需要爲每種車輛使用三個不同的迴路。

這是我下面的嘗試:

let vehicleObject = { 
    vehicles: [] 
} 

// I'm getting the response back from a http request 
Object.keys(body.vehicles).forEach(function (k) { 
    for (let i = 0; i < body.vehicles.k.length; i++) { 
     vehicleObject.vehicles.push({ 
      vehicle_type: k, 
      manufacturer: body.vehicles.k[i] 
     }); 
    } 
}); 

然而,這只是讓我「看不懂的未定義的屬性長度我知道我可以用一個開關或者三個,如果公司做到這一點,但我想學。一個更有效的方式,如果可能的話。謝謝。

+0

我認爲環應該是'爲(讓我= 0; i BenShelton

+0

如何看待你想要的輸出對象? (使用json編寫) –

回答

1

循環應該是這樣的:

Object.keys(body.vehicles).forEach(function (k) { 
    for (let i = 0; i < body.vehicles[k].length; i++) { 
     vehicleObject.vehicles.push({ 
      vehicle_type: k, 
      manufacturer: body.vehicles[k][i] 
     }); 
     console.log(vehicles[k].length) 
    } 
}); 

當你遍歷你正在在K鍵的名稱,然後拿到陣列從body.vehicles對象,你需要做的像身體的每個鍵.vehicles [K]。

+1

完美工作,我現在明白我的錯誤,謝謝! –

0

要申報範圍的全局變量,你可能應該使用var代替let

var vehicleObject = { 
    vehicles: [] 
}; 

let僅在{...}區塊內可到達,就像您在for {...}循環中使用它一樣。

0

看起來像你想對象的數組,如:

[{ vehicle_type: 'suvs', manufacturer: 'Honda' }, ... ] 

假設,body包含車輛對象:

const { vehicles } = body 
const vehicleTypes = Object.keys(vehicles) 
const getManufacturers = type => vehicles[type] 
const createVehicle = (type, mf) => ({ vehicle_type: type, manufacturer: mf }) 

let flattenedVehicles = [] 
vehicleTypes.forEach(type => { 
    flattenedVehicles.push(
    getManufacturers(type).map(mf => createVehicle(type, mf)) 
) 
}) 

// flattenedVehicles now has desired array