2017-02-09 2 views
1
dontMutateMeArray=[1,2,3,3,3,4,5]; 
toBeRemoved=3; 

newArray=dontMutateMeArray.something(toBeRemoved);   // [1,2,3,3,4,5] 
iDontWantArray=dontMutateMeArray.filter(value=>value===toBeRemoved); // [1,2,4,5] 

実際にオブジェクトの配列にも必要です。そして、具体的には最後に追加されたオブジェクト(すなわち、配列のインデックスの高いもの)を削除する必要があります。次のようなものがあります。アレイから最後に追加した値を変更せずに削除する

dontMutateMeArray=[{id:1},{id:2},{id:3,sth:1},{id:3,sth:42},{id:3,sth:5},{id:4},{id:5}]; 
toBeRemoved=3; 

newArray=dontMutateMeArray.something(toBeRemoved);   // [{id:1},{id:2},{id:3,sth:1},{id:3,sth:42},{id:4},{id:5}] 
iDontWantArray=dontMutateMeArray.filter(obj=>obj.id===toBeRemoved); // [{id:1},{id:2},{id:4},{id:5}] 
iDontWantArray2=dontMutateMeArray.blahBlah(toBeRemoved); // [{id:1},{id:2},{id:3,sth:1},{id:3,sth:5},{id:4},{id:5}] 
+0

これは明確ではない、あなたは何をお使いの後、ここで明確にすることができますか? – Liam

+0

最後に追加されたのは、配列内の最後のアイテムまたは最後に追加されたアイテムを意味しますか? – shadymoses

+0

あなたの目標が 'map'、' filter'、 'reduce'などのメソッドを元のものに変更せずに使用するのであれば、私は[lodash](https://lodash.com)/ [underscore](http: /underscorejs.org)。とにかく、組み込みのメソッドに対してそれらを使用する傾向があります。 –

答えて

1

右から反復して終了することができます。

var dontMutateMeArray = [{ id: 1 }, { id: 2 }, { id: 3, sth: 1 }, { id: 3, sth: 42 }, { id: 3, sth: 5 }, { id: 4 }, { id: 5 }], 
 
    toBeRemoved = 3, 
 
    newArray = dontMutateMeArray.reduceRight((found => (r, a) => (!found && a.id === toBeRemoved ? found = true : r.unshift(a), r))(false), []); 
 

 
console.log(newArray);

+0

シンプルでエレガントな1つのライナーが、レデューサーのスコープ外の別の変数の使用を避けています:) –

関連する問題