I have a code :
myarray[150] = 'a';
myarray[80] = 'b';
myarray[122] = 'c';
然后:
myarray.splice(80, 1);
myarray[80] = 'b';
我的应用程序上述代码的结果是:
我不明白为什么值为c的项具有索引121。有人可以解释一下我的代码哪里出了问题吗?[150] = 'a'; [80] = 'b'; [121] = 'c';
I have a code :
myarray[150] = 'a';
myarray[80] = 'b';
myarray[122] = 'c';
myarray.splice(80, 1);
myarray[80] = 'b';
我不明白为什么值为c的项具有索引121。有人可以解释一下我的代码哪里出了问题吗?[150] = 'a'; [80] = 'b'; [121] = 'c';
myarray.splice(80, 1);
您需要使用:
delete myarray[80]
安全删除
myarray
的更多元素,myarray.length
就会为您跟踪具有最高分配索引的元素。但是,如果您删除该元素,则myarray.length
保持不变,如果需要在元素删除后保留该跟踪行为,则必须手动调整它。 - jfroy你想要使用splice两次:
myarray.splice(80, 1);
myarray.splice(80, 0,"b");
myarray[80]=undefined;
var myarray={};
myarray[80]="b";
delete myarray[80];
因为当您在索引122处初始化c时,然后从数组中删除一个元素,其长度发生了变化,最新的索引现在是121而不是122
Array.prototype.splice()
文档所示,第二个参数是要删除的元素数量。myarray.splice(80, 1);
您只是在删除一个元素,位置为80。
"c"
会向左移动一个索引。
此外,进行编程
myarray[80] = 'b';
不会添加新元素,但会更改已存在元素的值。
myarray = {150:'a',80:'b',122:'c'}
In this case, simply dodelete myarray[80]
(ormyarray[80] = null
). An alternative data structure is an array of objects:myarray = []; myarray.push({id:150,value:'a'}),myarray.push({id:80,value:'b'}),myarray.push({id:122,value:'c'})
- Adam Jenkins