【问题标题】:JavaScript delete keeps "empty" in Object [duplicate]JavaScript删除在对象中保持“空”[重复]
【发布时间】:2018-06-12 03:03:51
【问题描述】:

尝试使用 delete 从对象中删除元素,但是当值消失时,对象中仍然存在“空”。如图所示:

这会在以下迭代中导致不需要的行为:

for (const [key, value] of ids.entries()) {
    if (Object.values(this.widget_ids).indexOf(value) >= 0) {
        delete ids[key]
    }
}

现在,我不能使用 popshift since 。我需要按键删除的选项,知道如何删除和删除这个空插槽吗?或者更好的是,在完全不处理的情况下删除?

【问题讨论】:

标签: javascript


【解决方案1】:

delete 的问题在于它会删除对象属性,但不会重新索引数组或更新其长度。这使它看起来好像是undefined 或空。

splice(start, deleteCount) 从数组中移除元素:

var ids = [322, 324, 435];
ids.splice(ids.indexOf(322), ids.indexOf(322) + 1);
console.log(ids);

【讨论】:

    【解决方案2】:

    您可以使用Array#splice,它允许在给定索引处删除一定数量的元素。

    delete 删除元素并在该索引处留下一个稀疏数组,但不会改变数组的长度。

    var ids = [322, 324, 435];
    
    ids.splice(0, 1);
    //         ^     index
    //            ^  count of elements to delete
    
    console.log(ids);

    【讨论】:

    • 只是一个附加功能,因为 OP 似乎想按 id 删除:在拼接函数中使用 indexOf(key)....
    【解决方案3】:

    使用拼接而不是删除,它只是设置undefined

    var ids = [1,2,3];
    console.log(ids);
    ids.splice(1,1);
    console.log(ids);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      • 1970-01-01
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多