JS:从对象中完全删除它

时间:2015-08-22 20:30:02

标签: javascript

我无法完全删除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循环将在没有剩下的项目时完成。

提前感谢您的回答!

3 个答案:

答案 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帖子。

编辑:

我给你留下片段:

&#13;
&#13;
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;
&#13;
&#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中删除该项目。