我无法完全删除itme对象。 我试过了:
function randomKey(obj) {
var ret;
var c = 0;
for (var key in obj)
if (Math.random() < 1/++c)
ret = key;
return ret;
}
while(aCountryNames.length > 0){
randomValue = randomKey(aCountryNames);
alert(randomValue); // 42x
delete aCountryNames[randomValue];
}
我使用了额外的var来完成此任务:
var i = 42;
while(i > 0){
randomValue = randomKey(aCountryNames);
alert(randomValue); // 42x
delete aCountryNames[randomValue];
i--;
}
第一次以“未定义”警告结束。
对象是:
var aCountryNames = {
Alaska: 'Alaska',
NorthWestTerritory: 'North West Territory',
Alberta: 'Alberta',
Ontario: 'Ontario',
Greenland: 'Greenland',
etc.
选择一个项目后(选择没问题,但是为了测试我使用警报),我想完全从对象中删除它,所以我的第一个while循环将在没有剩下的项目时完成。
提前感谢您的回答!
答案 0 :(得分:1)
我试过这段代码:
var data = { a:"a", b:"b" };
delete data["a"];
它有效,属性a
已被删除。
我认为您无法通过索引从对象中删除项目,例如:delete data[0]
您必须指明要删除的属性的名称。
答案 1 :(得分:1)
正如 Noah Freitas 所指出的,对象没有长度属性。
你应该替换
aCountryNames.length
的
Object.keys(aCountryNames).length
也许你想查看关于计算物体长度的this帖子。
编辑:
我给你留下片段:
var aCountryNames = {
Alaska: 'Alaska',
NorthWestTerritory: 'North West Territory',
Alberta: 'Alberta',
Ontario: 'Ontario',
Greenland: 'Greenland'
}
function randomKey(obj) {
var ret;
var c = 0;
for (var key in obj)
if (Math.random() < 1/++c)
ret = key;
return ret;
}
while(Object.keys(aCountryNames).length > 0){
randomValue = randomKey(aCountryNames);
delete aCountryNames[randomValue];
alert(randomValue + '; there are ' + Object.keys(aCountryNames).length + ' countries left.');
}
&#13;
希望它有所帮助!
答案 2 :(得分:1)
正如here指出的那样,你不能像引用数组那样通过引用数字索引来删除项目。您需要使用密钥删除该项目。
如果您尝试从对象中删除随机项,则可以执行与以下内容类似的操作:
function randomItem(obj) {
var result,
count = 0;
for (var prop in obj)
if (Math.random() < 1/++count)
result = prop;
return result;
}
var aCountryNames = {
Alaska: 'Alaska',
NorthWestTerritory: 'North West Territory',
Alberta: 'Alberta',
Ontario: 'Ontario',
Greenland: 'Greenland'
// Additional items
}
delete aCountryNames[randomItem(aCountryNames)];
randomItem()
函数将从对象返回一个随机密钥。使用delete aCountryNames[randomItem(aCountryNames)]
会从aCountryNames
中删除该项目。