从数组javascript中删除旧值

时间:2014-02-26 04:44:54

标签: javascript jquery arrays

我有一个像以下一样的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保留所需元素从数组中取消旧值?

4 个答案:

答案 0 :(得分:3)

编辑:根据OP的后续评论,看起来您想要下面的最后两个选项之一(我将其他选项留在这里用于教育目的)。

要获取最后N个元素(在这些示例中使用2),您有这些选项取决于您是否要从原始数组中删除其他所有内容,仅删除原始数组中的最后N个或复制原始数组的最后N个。并且,它还取决于您的阵列是否备用(您的示例看起来可能是这样)。

基本上,这里的朋友是阵列操作.splice().slice().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);

所有方法的演示:http://jsfiddle.net/jfriend00/f7LrA/

答案 1 :(得分:2)

您必须使用Array.slice()在此上下文中实现您想要的目标。

尝试,

stack = stack.slice(stack.length - n , stack.length)

DEMO

答案 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; });