从数组中删除最后添加的值而不进行变更

时间:2017-02-09 16:21:33

标签: javascript arrays ecmascript-6 immutability

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

1 个答案:

答案 0 :(得分: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);