2017-10-17 20 views
0

からヘッダを使用してJSONからオブジェクトを作成します。それぞれのタイプの車両に3つの異なるループを使用する必要はありません。は、私は以下に似てJSONオブジェクトを持つJSON

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] 
     }); 
    } 
}); 

しかし、これは単なる「未定義のプロパティの長さを読み取ることができないように私をリードして私がいた場合、私はスイッチまたは3でこれを達成することができます知っているが、私は勉強したいと思います:ここで

は、以下の私の試みがあります。可能な場合は、より効率的な方法、。ありがとう。

+0

私はループは、(i = 0聞かせするために 'すべきだと思います。同様にメーカーフィールドは 'body.vehicles [k] [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から配列を取得するためには、あなたが体のような何かをする必要があるオブジェクト。ビヒクル[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 
関連する問題