2017-12-06 6 views
2

オブジェクトの配列があり、別の配列のIDのリストでいくつかの要素を削除しようとしています。リストでプロパティをフィルタリングする矢印関数を使用するには

は私が

transactions = [{id:12, name:'trs1'}, {id:18, name:'trs18'}, {id:45, name:'trs145'}, {id:98, name:'trs19'}]; 

ids = [12, 98]; 

があるとそれから私は、私は、IDSの配列で指定されたIDを持つ取引配列から要素を削除しようとしています

transactions = [{id:18, name:'trs18'}, {id:45, name:'trs145'}]; 

で終わるしたいです。

私はフィルタを実行して元の配列をids配列に含まれる要素を含まないこの新しいサブ配列に置き換えるサブ配列を作成することを考えています。

var subArray = transactions.filter(trans => trans.id != ids) 
transactions = subArray; 

のようなものしかし、私は、関数を矢印に新しいですし、私はこれを実現する方法がわかりません。ドキュメントでは、比較演算子として==を使用しているだけです。しかし、私は要素のリストと比較する何かを探しています。

+0

希望の結果を追加してください。 –

答えて

1

あなたはArray#everyidをチェックすることができます。

var transactions = [{ id: 12, name: 'trs1' }, { id: 18, name: 'trs18' }, { id: 45, name: 'trs145' }, { id: 98, name: 'trs19' }], 
 
    ids = [12, 98], 
 
    subArray = transactions.filter(trans => ids.every(id => trans.id !== id)); 
 

 
console.log(subArray);

+0

ありがとう!このソリューションは私のために働く:) – jpavelw

2

あなたはids配列がid含まれていないかどうかを確認するためにArray#includesArray#filterを使用することができます。

const transactions = [{id:12, name:'trs1'}, {id:18, name:'trs18'}, {id:45, name:'trs145'}, {id:98, name:'trs19'}]; 
 

 
const ids = [12, 98]; 
 

 
const result = transactions.filter(({ id }) => !ids.includes(id)); 
 

 
console.log(result);

別のオプションをids配列からSetを作成し、チェックすることですセットがない場合haveid

const transactions = [{id:12, name:'trs1'}, {id:18, name:'trs18'}, {id:45, name:'trs145'}, {id:98, name:'trs19'}]; 
 

 
const ids = [12, 98]; 
 
const idsSet = new Set([12, 98]); 
 

 
const result = transactions.filter(({ id }) => !idsSet.has(id)); 
 

 
console.log(result);

+0

私はこの解決策が好きで、削除したい要素のリストが必要な場合にはうまくいきます...しかし、最終的にはids配列にない要素のリストが必要です。除外または同様のものはありますか?それと反対のもの。私はドキュメンテーションでそれを見つけることができませんでした。 – jpavelw

+0

@jpavelw - '!'(not)演算子を使ってインクルードを無効にし、Set#hasを使うことができます。更新例を参照してください。 –

関連する問題