我有一个像以下一样的JavaScript数组,
var stack=array();
stack[0]=1;
stack[1]=10;
stack[5]=5;
------------
------------
stack[50]=15;
stack[55]=5; etc
我只需要此数组中的最后 n 元素,我的意思是如果n = 2, 然后我的结果如
stack[0]=15;
stack[1]=5;
如何使用JavaScript保留所需元素从数组中取消旧值?
答案 0 :(得分:3)
编辑:根据OP的后续评论,看起来您想要下面的最后两个选项之一(我将其他选项留在这里用于教育目的)。
要获取最后N个元素(在这些示例中使用2),您有这些选项取决于您是否要从原始数组中删除其他所有内容,仅删除原始数组中的最后N个或复制原始数组的最后N个。并且,它还取决于您的阵列是否备用(您的示例看起来可能是这样)。
基本上,这里的朋友是阵列操作.splice()
和.slice()
。 .splice()
更改原始数组。 .slice()
复制原始数组中的元素。
以下是您的一些选择(具体取决于您想要做什么):
// remove all elements except the last 2 from the array
stack.splice(0, stack.length -2);
或
// return a new array of just the last two elements
// removes them from the original array too
var lastElements = stack.splice(-2, 2);
或
// return a copy of just the first two items in the array (
// leaves original array unchanged
var lastElements = stack.slice(-2);
或
如果你的数组是稀疏的并且你想收集实际存在的最后N个元素,那么你可以迭代它,收集存在的元素:
var collection = [];
for (i = stack.length - 1; i >= 0; i--) {
if (stack[i] !== undefined) {
collection.unshift(stack[i]);
if (collection.length == 2) {
break;
}
}
}
或
如果您不需要IE8支持或将为Array.prototype.filter
安装polyfill而您只想要最后两个元素的副本,则可以缩短之前的选项:
stack = stack.filter(function(item) {return item !== undefined}).slice(-2);
答案 1 :(得分:2)
答案 2 :(得分:0)
您可以使用splice
更改数组
stack.splice(2, stack.length - 2);
您可以使用slice
获取新数组
var newStack = stack.slice(0, 2);
答案 3 :(得分:0)
您认为您的阵列不使用连续键,但确实如此。您未明确指定的索引值仅为undefined
。
您需要从数组中删除undefined
元素,然后对结果进行切片:
var stack = [];
var n=2;
stack[0]=1;
stack[1]=10;
stack[2]=5;
stack[7]=15;
stack[9]=5;
// Here, stack == [1, 10, 5, undefined × 4, 15, undefined × 1, 5]
// map stack to a new array, omitting "falsy" values
stack = stack.filter(function (v) { return v; });
// Now stack == [1, 10, 5, 15, 5]
stack = stack.slice(stack.length - n , stack.length)
console.log(stack[0]); // 15
console.log(stack[1]); // 5
这省略了任何虚假的价值;如果您只想删除undefined
元素...
stack = stack.filter(function (v) { return v !== undefined; });