从数组中删除最后添加的值而不改变它

Remove last added value from array without mutating it

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}]

您可以从右边开始迭代并检查闭包。

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);