2016-12-20 1 views
3

基本的に、jsonから「items」を取得して再割り当てし、他のキーは変更しないでください: 最初の方法はデータを複製します。 2番目はパフォーマンスの面で悪いようです。 3番目は読んで理解しにくいです。 私はロダッシュを使用します。しかし、それが巧妙なやり方ではできないなら、あなたは私に別のライブラリを提案することができます。Reduxアクションオブジェクトの1つの関数(lodash)を選択して削除する

function a(name, json) { 
    return { 
     type: RECEIVE_DATA, 
     name, 
     items: _.get(json, 'data.items', []), 
     receivedAt: Date.now(), 
     ...json, 
    }; 
} 

function b(name, json) { 
    return { 
     ..._.omit(json, 'data'), 
     type: RECEIVE_DATA, 
     name, 
     items: _.get(json, 'data.items', []), 
     receivedAt: Date.now(), 
    } 
} 

function c(name, json) { 
    return { 
     ..._.transform(json, (result, value, key) =>{ 
      if (key === 'data') { 
       result['items'] = value['items']; 
      } else { 
       result[key] = value; 
      } 
     }, {}), 
     type: RECEIVE_DATA, 
     name, 
     receivedAt: Date.now(), 
    } 
} 

答えて

0

使用パラメータdestructuringのparamsの残りの部分を収集するためにitems、およびrest propertiesを取得する:

const json = { another: [], data: { items: [1] } }; 
 

 
function a(name, { data, data: { items = [] }, ...jsonRest } = {}) { 
 
    return { 
 
    type: 'RECEIVE_DATA', 
 
    name, 
 
    items, 
 
    receivedAt: Date.now(), 
 
    ...jsonRest 
 
    }; 
 
} 
 
      
 
console.log(a('name', json));

また、矢印を使用して、アクションの作成者を少し短くすることができます機能:

const a = (name, { data, data: { items = [] }, ...jsonRest } = {}) => ({ 
    type: RECEIVE_DATA, 
    name, 
    items, 
    receivedAt: Date.now(), 
    ...jsonRest 
}); 
+0

ので、多くの人々。それはJavaScriptが実際にそれを得てどこでも確認されますか? – naomik

+0

[これはECMAScriptの第3ステージの提案です](https://github.com/sebmarkbage/ecmascript-rest-spread)と非常に一般的な機能なので、そうなると思います。そうでない場合でも、私たちは常にバベルを持っています。 –

0

あなたの関数内のカップルより多くのラインを有する気にしない場合、あなたは簡単にだけdeleteそれをそのキーからデータをつかむことができます:今、スプレッドオブジェクト構文を使用して

function a(name, json = {}) { 
    const { items = [] } = json.data; 
    delete json.data; 
    return { 
     type: RECEIVE_DATA, 
     name, 
     items, 
     receivedAt: Date.now(), 
     ...json, 
    }; 
} 
+0

'json.data'にアクセスするのは危険ですので、危険です! –

+0

@SashaTobin 'json'のオブジェクトのデフォルト値を格納するように答えを更新しました。' json'がオブジェクトの場合、これを使う危険はありません。 'json'が未定義であるかオブジェクトでない場合、それは失敗します(デフォルトの引数なし) –

関連する問題