我想创建一个空白的数组,直到索引为止(示例700)

var a=[];
a[700]=true;

//produces [700:true].length==700


然后每次我随机添加另一个索引(非常接近最后一个索引702,703,699 ...)

我想(在每个新索引上)将数组的长度保留为最高索引号,但要摆脱不在前十个最高索引中的每个索引。

一个for循环(其中a [i] = null除最后10个索引以外的所有内容)是不可能的,因为此数组的最后一个索引可能是一个很大的数字,这将导致迭代代码挂起太久!

所以我想Array.slice将是即时的...

我不明白的是,如果我的数组长度为700,而我这样做:

a=a.slice(a.length-10,a.length-1);


为什么我的数组现在为[700:true].length==701

最佳答案

要摆脱最后10个索引中没有的true值,可以用true迭代forEach元素,该元素仅访问存在的条目。然后使用delete可以删除这些条目:

a.forEach ((v, i, a) => {
    if (i < a.length - 10) delete a[i];
});




var a=[];

a[700]=true;
a[702]=true;
a[699]=true;
a[692]=true; // this one should be removed

// clean-up:
a.forEach ((v, i, a) => {
    if (i < a.length - 10) delete a[i];
});

// show last 13 elements:
for (var i=a.length-13; i<a.length; i++) {
    console.log (i, a[i]);
}
// output length
console.log('length: ', a.length);

关于javascript - 切片阵列-“装袋区域中的意外物品?”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39625356/

10-09 14:03