我目前有一个由密钥索引的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;
我不确定我的列表是否是组织我的结构的最佳方式,但是在列表上执行删除并将其视为对象属性就可以了。
感谢所有反馈。
答案 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文件)。对你所追求的东西似乎有点混乱,希望这对你有所帮助。祝你好运。