大家好我想首先使用字符串索引在数组中添加项目,稍后使用相同的strint索引删除该项目。 例如
var array = new Array();
array['i1'] = '9807988';
array['i2'] = '9875353';
array['i3'] = '9875353';
现在我有索引i2并希望删除该项目
var key = 'i2';
array.splice(key,1)
但这不符合我的情况。这里是i1,i2,......和他们的价值9807988,9875353,...... 在我的情况下是动态的。我必须用键i1,i2删除它们的值。请告诉我我做错了什么。
答案 0 :(得分:3)
你不创建Array
个实例! JS不知道关联数组,它们是对象。当你定义一个非数字的“index”时,数组就会成为一个Object,失去所有那些好东西,比如length
和典型的数组方法。
这可以归结为JS最初没有数组,而是稍后介绍的。 Array
构造函数实际上只是Object.prototype
的扩充。您可以通过以下几种方式检查:
var anArray = [1,2];
for(var index in anArray) console.log( typeof index);
每次都记录string
,而不是Number
,因为内部数组是一个对象,因此所有数字索引都被强制转换为字符串。
这也解释了为什么你的代码(使用数组作为对象)可以正常工作。
在对象上使用splice
的主要原因是一个坏主意,即使方法仍然存在,ECMAScript规范也没有强制执行给定的顺序必须将属性添加到obejct中。例如,Chrome的V8引擎按字母顺序对它们进行排序,但您无保证其他引擎执行相同的操作,因此您的代码将无法预测。
注意:
不要使用new Array
,因为它可能会不时地侮辱你:
var someNumber = 213;
var a = new Array();//same as a = [];
var b = new Array(someNumber);// NOT the same as b = [someNumber]
console.log(b.length);//213!!!!
console.log(b);//[undefined, undefined, undefined,....]
var c = new Array(someNumber + '');//THE SAME as b = [someNumber + '']
console.log(c);//['213']
因此,根据您传递给数组构造函数的内容,生成的数组看起来可能与您预期的不同。
至于你的代码,写:
var yourObject = { i1: '9807988',
i2: '9875353',
i3: '9875353'};
delete(yourObject.i2);
//or
delete(yourObject['i2']);
阅读你可以用MDN上的对象做什么
答案 1 :(得分:3)
Elias是对的,它实际上是一个对象,您可以使用delete从对象中删除属性
delete array[key];
答案 2 :(得分:-1)
var array = new Array();
array[0] = '9807988';
array[1] = '9875353';
array[2] = '9875353';
var key = 1;
array.splice(key,1)
for(i=0;i<array.length; i++)
{ document.write(array[i]);
document.write('</br>');
}