从javascript对象列表中删除对象

时间:2014-08-06 23:44:49

标签: javascript jquery arrays object

我目前有一个由密钥索引的javascript中的对象列表:

var list = [];
list['a'] = [];
list['a'].push({obj: 'test'});
list['a'].push({obj: 'test2'});

list['b'] = [];
list['b'].push({obj: 'test'});
list['b'].push({obj: 'test2'});

我会列出根据键(a / b)

删除条目

我尝试了以下内容:

for(var x in list) { delete list[x]; }

有效,但它实际上在列表中留下了一个未定义的条目。

我也试过拼接数组,但在这种情况下似乎不起作用。

有关如何删除javascript或jQuery中的条目的任何想法?

感谢。

修复:

在阅读了一些评论后,我能够更好地理解我的列表的一致性。因此,我能够通过以下方式进行删除:

delete list.b;

我不确定我的列表是否是组织我的结构的最佳方式,但是在列表上执行删除并将其视为对象属性就可以了。

感谢所有反馈。

4 个答案:

答案 0 :(得分:2)

我假设list是一个对象,而不是一个数组。

如果你想重置a或(或b,我们会以同样的方式重置它)

list.a.length = 0;

如果您想从已知索引的a删除元素(让index

list.a.splice(index, 1);

答案 1 :(得分:1)

您尝试将元素作为对象属性添加到数组对象中,而不是作为数组元素。您可以通过检查list.length的值(将为0)来验证这一点。

所以在做以下事情时:

function removeProperty(id) {
    if (list.hasOwnProperty(id)) {
      delete list[id];
  }
}

removeProperty('a');

它真的一样:

delete list.a;

这就是为什么你认为留下一个未定义的条目'在'列表'

您需要使用文字对象:

var list = {};

list['a'] = [];
...

list['b' = [];
...

允许您使用delete并使其按预期运行。当然,你会丢失阵列上的.length属性但是你从来没有这样做过。

答案 2 :(得分:0)

var list = {1: [{},{}], 2: [{},{}]};

function removeProperty(obj, prop){
    if(obj[prop]){
        delete obj[prop];
    }
}

removeProperty(list,"1");

console.log(list);

答案 3 :(得分:0)

如果这个引用:

  

我会列出根据键(a / b)

删除条目

表示你想根据键(a / b)选择要考虑的列表,然后删除列表中的元素(或所有这些元素),你可以试试这个:

var list = [];
list['a'] = [];
list['a'].push({obj: 'test4'});
list['a'].push({obj: 'test5'});

list['b'] = [];
list['b'].push({obj: 'test'});
list['b'].push({obj: 'test2'});

var toRemove = 'test4';
var removeFrom = "a";

var consideredList;
for (var prop in list) {
  if (prop == removeFrom) {
    consideredList = list[prop];
  }
}

//Remove everything from the considered list
consideredList.splice(0, consideredList.length);

//Remove based off value, if you know the property  name
// for(var pos in consideredList) {
//   if(consideredList[pos].obj == toRemove) {
//     consideredList.splice(pos, 1);
//   }
// }

我做了几个不同情况的Plunker(查看script.js文件)。对你所追求的东西似乎有点混乱,希望这对你有所帮助。祝你好运。