从数组中删除最后一个与特定值匹配的元素的最佳方法是什么?
例如:
components = dedupeLast(components, '<app-builder-placeholder></app-builder-placeholder>');
function dedupeLast(a, target) {
for(let i = 0; i < a.length; i++){
if (i === a.length) {
if(a[i] === target)
a.splice(i, 1);
}
}
}
答案 0 :(得分:3)
如果这是您要查找的最后一个元素,那么您根本不需要循环,只需检查数组是否为空,然后直接访问最后一个元素:
function dedupeLast(a, target) {
if(a.length && a[a.length - 1] === target){
a.pop();
}
}
它显示为:如果a
不为空(a.length != 0
)并且最后一个元素为a[a.length - 1] === target
,则使用pop
删除最后一个元素。
答案 1 :(得分:1)
如果满足条件,您可以使用pop
访问最后一个元素,将其删除,然后再次添加。
function dedupeLast(a, target) {
let temp = a.pop();
if(temp === target){
return;
}
else{
a.push(temp);
}
}
答案 2 :(得分:1)
由于 array.splice 创建了一个新的Array并将复制的元素复制到其中,所以我会使用 array.pop 来获得更好的性能。
function dedupeLast(a, target) {
let temp;
if(a.length && a[a.length - 1] === target){
temp = a.pop();
}
}
Array.prototype.pop()仅删除最后一个元素,然后将其返回。如果您之前检查过,如果该元素等于目标,则无需 pop 和 push 。如果您需要将移除的元素用于其他用途,则可以使用 temp 。