使用indexOf从列表中删除对象
Using indexOf to remove an Object from a list?
所以,我看到了这段代码:
removeOrder = (order) ->
index = listOfOrders.indexOf(order)
if index isnt -1
listOfOrders.splice index, 1
其中order
是这样的对象:
order = {
id: whatever
field1: whatever
...
}
由于作为参数传递的order
引用了listOfOrders
中的某个对象,类似于removeOrder(listOfOrders[i])
,所以现在可以使用这种方法。但我的问题是,这安全吗?我的意思是,我认为迭代订单列表并搜索具有相同id的对象并将其删除会更好
据我所知,当我们搜索的对象是"简单"对象(数字、字符串等)时,indexOf
是可以的
根据indexOf的这些文档,indexOf使用严格相等的===
。
var a = {id:1};
var b = {id:1};
a === a; // this is true
a === b; // this is false
所以它是安全的,一般来说,对象
您确实需要检查indexOf!=-1通过拼接前
var removeOrder = function(order)
{
var index = listOfOrders.indexOf(order);
if (index != -1)
return listOfOrders.splice(index, 1); //for chaining?
return listOfOrders;
}
如果预期目的是通过引用从数组中删除对象,那么使用indexOf
是安全的。
如果您想通过id
删除第一个对象,比如说,您可以使用以下内容:
var removeOrderById = function(orderId)
{
var orders = listOfOrders.filter(function(item)
{
return item.id == orderId;
});
if (orders.length > 0)
{
var index = listOfOrders.indexOf(orders[0]);
return listOfOrders.splice(index, 1); //for chaining?
}
return listOfOrders;
}
结论:这都是关于用例的。
假设数组中正好有一个对对象的引用,则函数的工作方式为整数。
如果对象不在数组中(或者使用数组中对象的克隆调用它),则索引将为-1,而splice
调用将删除数组中的最后一项。由于这不是一种合理的行为,因此确实应该对此进行检查(我看到你补充了这一点)。
indexOf
方法可靠地适用于对象引用,但它实际上必须查找相同的对象。
寻找一个具有特定属性值的对象也是可行的,但它遵循相同的假设;该值必须在数组中恰好出现一次才能按预期工作。
相关文章:
- 解析JSON并从中删除对象会出错
- 在特定条件下从存储在localStorage中的阵列中删除对象
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 正在从列表中删除对象
- 删除对象时终止setInterval
- 在JavaScript中高效地删除对象
- 使用javascript(ajax,jquery?)从表中删除对象(用户等)
- 从范围中删除对象时,它会在 Angularjs 中隐藏其余对象
- 如何正确地从数组中删除对象
- 捕捉.svg — 单击其中一个元素时删除对象
- 如何删除对象数组中的对象:jquery
- 下划线.js,根据键值删除对象数组中的重复项
- 如何在Immutable中从数组中删除对象
- 删除对象属性在执行删除操作之前生效
- 使用indexOf从列表中删除对象
- 从数组中删除对象
- 如何使用.bind(this)删除对象的事件侦听器
- 正在创建事件侦听器以从本地存储中删除对象
- 如何通过引用(javascript)从数组中删除对象
- 如何按条件删除对象中的对象