2017-09-08 3 views
-1

でいくつかのプロパティを変更javascriptオブジェクトを割り当てる:は、私は(useing lodash)このJavaScript istructionを持って1 istruction

list = _.reduce(list, (acc, next, index) => { 
    acc.push({ 
     key: index, 
     data: next 
    }); 
    return acc; 
}, []); 

私はに割り当てる前に、「次の」オブジェクトのいくつかのプロパティを変更している行うために必要なもの」データ "オブジェクトである。
具体的には、「start_time」と呼ばれる時間プロパティをフォーマットし、「データ」オブジェクトに別のプロパティを追加する必要があります。

UPDATED

これは、 "次の" オブジェクトがどのようにある:

next = { 
    key: "new_key" // NEW PROPERTIES ADDED TO THE OBJECT 
    id: "1", 
    start_time: "20:00", // THIS PROPERTIES HAS BEEN FORMATTED 
    title: "Example" 
} 

新しいオブジェクトは次のようになります。

next = { 
    id: "1", 
    start_time: "20:00:00", 
    title: "Example" 
} 

は何が必要なのこのような新しいオブジェクトであります"acc"配列に追加された新しい項目の "data"プロパティに割り当てられます。
1命令でES2015またはlodashを使用することはできますか?

は、私はそれがこのコードをuseing解決(Object.assignと一緒にマップ)

を解決しよう:

list = _.reduce(list, (acc, next, index) => { 
    next = next.map(function(item) { 
     return Object.assign({}, item, {key: new_key, start_time: format_date}); 
    }); 

    acc.push({ 
     key: index, 
     data: next 
    }); 
    return acc; 
}, []); 

おかげ

+0

質問にデータを追加してください。 –

+0

この場合、 'map'は' reduce'よりも適切でしょう。 –

+0

私はこのコードを最適化するのを助けることができれば、javascriptを深く理解していないと思います。 –

答えて

1

Object.assign()考えてみましょう。これは、ベースオブジェクトを受け取り、その後、対応するフィールドを上書きし、1つのまたは複数の他のオブジェクトとそれをマージします。それはあなたの既存のオブジェクトを変異避けるために、裸の新しいオブジェクト{}を開始するために慣用的だ

Object.assign({}, next, {key: myKey, start_time: format(next.start_time)})

注こと。

+0

良いアドバイス、私はそれが私が探していたと思います。しかし、私は、 "次の"変数はオブジェクトではなく、オブジェクトの配列であることに気付きました。だから私はすべての "次の"項目にあなたのコードを使用する必要があります。 –

関連する問題