尝试使用delete
从对象中删除元素,但是当值消失时,对象中仍然存在“空”。如图所示:
在后续迭代中导致不必要的行为:
for (const [key, value] of ids.entries()) {
if (Object.values(this.widget_ids).indexOf(value) >= 0) {
delete ids[key]
}
}
现在,我无法使用pop
或shift
。我需要通过键删除选项,任何想法如何删除和删除此空插槽?或者甚至更好,在没有完全处理的情况下删除?
答案 0 :(得分:4)
您可以使用Array#splice
,它允许在给定索引处删除一定数量的元素。
delete
删除元素并在此索引处留下稀疏数组,但它不会更改数组的长度。
var ids = [322, 324, 435];
ids.splice(0, 1);
// ^ index
// ^ count of elements to delete
console.log(ids);
答案 1 :(得分:0)
delete
的问题是它删除了对象属性,但不会重新索引数组或更新其长度。这使它看起来好像是undefined
或空。
splice(start, deleteCount)
从数组中删除元素:
var ids = [322, 324, 435];
ids.splice(ids.indexOf(322), ids.indexOf(322) + 1);
console.log(ids);
答案 2 :(得分:0)
使用拼接而不是删除,只需设置undefined
var ids = [1,2,3];
console.log(ids);
ids.splice(1,1);
console.log(ids);