2017-10-27 17 views
1

私は条件によってフィルタリングされたデータ内でissuesをループしています。フィルタリングされたオブジェクトのループをlodashで改善するにはどうすればよいですか?

const rowObjects = Object.keys(data).filter((list) => { 
 
    let issueRow = data[list]; 
 
    let destroyFilter = list._destroy: 
 
    return !destroyFilter ? list : null; 
 
}). 
 
map((issue, key) => ({ 
 
    console.log(key + 1) 
 

 
}));

lodashこの藤堂方法がある場合、私は疑問に思って?

+2

私が働いてコードの設計を改善に関する質問はCodeReview.stackexchange.comに属しているため、オフトピックとして、この質問を閉じるために投票しています。 – Barmar

+0

'_.filter()'を使用してください。 https://lodash.com/docs/4.17.4#filter – Barmar

+0

'_.filter'はオブジェクト上で直接呼び出すことができるので、' Object.keys() 'を使う必要はありません。この関数は、キーと値を引数として受け取ります。 – Barmar

答えて

1

私はこのような何かをするだろう、私は実際に学びました。

const filter = _.pickBy(data, (list) => { 
return //whatever you want 
    }); 
0

あなたのコードを見ると、あなたが収集できるものからオブジェクトリテラルとしてデータを持っているので、_destroyタグでは不要なキーにマークを付けます。

他のオブジェクトのリテラルには、_destroyとマークされていません。

以下は、ロダッシュなしのバージョンです。 ロダシュの方が簡単かもしれませんが、わかりません。しかし、私にとってはES6のやり方はとても自然に見え、従うのも簡単です。ビットをユーティリティ関数に分割することでより簡単に見えるようにすることさえできます。最後のreduceは、キー/値が必要な他の場所で使用され、オブジェクトリテラルに変換されます。

ps。元のオブジェクトリテラルを変更しても構わない場合、これはさらに簡単であり、パフォーマンスが向上する可能性があります。 Reactのようなものは確定的なデータが好きだと思うので、インプレイスを削除することは選択肢ではないかもしれません。

const data = { 
 
    a: { 
 
    _destroy: true, 
 
    value: "destroy this" 
 
    }, 
 
    b: { 
 
    value: "Keep Me!!" 
 
    } 
 
}; 
 

 
const data2 = 
 
    Object.entries(data). 
 
    filter(([key, value]) => !value._destroy). 
 
    reduce((obj, [key, value]) => (obj[key] = value) && obj, {}); 
 

 
console.log(data2);

関連する問題