【问题标题】:remove object from array with just the object's reference仅使用对象的引用从数组中删除对象
【发布时间】:2013-07-15 15:16:21
【问题描述】:

假设我有一个名为MyArray 的对象数组,并且某个函数返回该数组中特定元素的引用;像这样:

MyArray = [Object1, Object2, ..., Objectn];

function DoWork() {

   var TheObject = GetTheObject(SomeParamter);
}

此时,TheObject 指向数组中的某个元素。假设我想从MyArray 中删除这个元素,这是否可能无需重新循环通过数组来获取元素的索引?

我正在寻找类似 splice 的东西,它可以使用对元素的引用而不是元素的索引。

【问题讨论】:

  • 写入TheObject = null 不会从数组中清除对象。你错了。
  • arr.splice(arr.indexOf(obj), 1);
  • 如果应该从数组中删除一个对象,那么您或引擎将无法绕过数组。您可以考虑为GetTheObject 添加一个可选参数,如果true 将删除,如果false 则保留。
  • @dandavis:你明白了

标签: javascript arrays


【解决方案1】:

只需使用Array.prototype.indexOf:

let index = MyArray.indexOf(TheObject);
if(index !== -1) {
  MyArray.splice(index, 1);
}

请记住,如果针对 IE indexOf 引入 polyfill;你可以在 MDN 页面找到one

【讨论】:

  • 删除从何而来?
  • 好的,那么如果它在 IE8 中不起作用,我仍然会接受答案并记住它以备后用,即使我必须重新循环,因为现在必须支持 IE8。
  • @frenchie: indexOf 无论如何都会在所有浏览器中重新循环。我并不是说它以某种方式确定了索引是凭空产生的。
  • 这不能回答问题。 OP 要求通过引用删除一个元素,但答案没有这样做,它通过索引删除它。
  • @tshm001:呃,在这个问题的上下文中,甚至在任何上下文中,多个数组如何有意义?谈到这个问题,它清楚地表示“我想从MyArray 中删除这个元素”——那里没有歧义。在更一般的上下文中,除非您明确编码它以搜索给定的一组容器,否则任何语言或库如何提供“在它可能位于的任何容器中删除此对象”?这完全没有意义。
猜你喜欢
  • 1970-01-01
  • 2022-01-19
  • 2016-10-28
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 2012-04-18
相关资源
最近更新 更多