2016-04-06 8 views
0

javascript配列をオブジェクトで変換するのが最善の方法であると思います。私はロダッシュで素晴らしい鎖を作ってみましたが、私はそれを理解できません。オブジェクトを使ってjavascript配列をlodashで変換する

バックエンドの仕組みのため、この方法でデータをフォーマットする必要があります。あなたは2つのmapコール(に建てられた配列またはlodashのマップ)で、非常に簡潔にこれを行うことができ、1は各オブジェクト内"included"配列を処理するために、ネストされた

// from: 
var something = [ 
    { 
    name: 'foo', 
    stuff: [ 
     { 
     id: 1 
     }, 
     { 
     id: 2 
     }, 
     { 
     id: 3 
     } 
    ] 
    }, 
    { 
    name: 'bar', 
    stuff: [] 
    }, 
    { 
    name: 'baz', 
    stuff: [ 
     { 
     id: 7 
     }, 
     { 
     id: 8 
     } 
    ] 
    } 
]; 

// to: 
var transformed = [ 
    { 
    name: 'foo', 
    included: { 
     included: [1, 2, 3] 
    } 
    }, 
    { 
    name: 'bar', 
    included: { 
     included: [] 
    } 
    }, 
    { 
    name: 'baz', 
    included: { 
     included: [7, 8] 
    } 
    } 
]; 
+0

を参照してください。 – Andy

答えて

2

const transformed = something.map(it => { 
    return { 
    name: it.name, 
    included: { 
     included: it.stuff.map(thing => thing.id) 
    } 
    }; 
}); 
1

lodashのための必要はありません、

// Sorry no fancy ES6 => here :S 
var res = something.map(function(item) { 
    item.included = {included : item.stuff.map(function(i) {return i.id})} 
    delete(item.stuff) 
    return item 
}) 

@ssubeのコメントあたり:ちょうどArray.prototype.map functionを使用する

var res = something.map(function(item) { 
    return { 
    included : {included : item.stuff.map(function(i) {return i.id})}, 
    name: item.name 
    } 
}) 

あなたは本当にあなたが試したコードを追加している必要がありthis fiddle

+0

これは 'map'がしてはならない元のオブジェクトを変更することになります([この出力を見る](https://jsfiddle.net/esavpwjw/1/)参照)。 'item'を変更して返すのではなく、適切なプロパティを持つ新しいオブジェクトを返すことをお勧めします。 – ssube

+0

チップのおかげで! – cl3m

関連する問題