Javascript indexOf on an array of objects

在 JavaScript 中,indexOf() 方法是一个常用的方法,它用于查找数组中某个元素第一次出现的位置。然而,在处理包含对象的数组时,使用 indexOf() 方法可能会遇到一些问题,因为它默认比较的是两个对象的内存地址是否相同,而不是对象的属性值是否相等。本文将介绍如何在数组对象中正确使用 indexOf() 方法。

问题排查

假设我们有以下包含对象的数组:

----- ----- - -
  - --- -- ----- ------ --
  - --- -- ----- ------ --
  - --- -- ----- ----- -
--

如果我们想要查找用户 id 为 2 的索引位置,我们可能会尝试使用 indexOf() 方法:

--------------------------- --- -- ----- ------ ---- -- --

但是这会返回 -1,表示没有找到相应的元素。这是因为 indexOf() 比较的是两个对象的内存地址,而不是属性值。因此,虽然我们提供了相同属性的对象,但它们的内存地址不同,所以 indexOf() 将返回 -1

解决方案

为了解决这个问题,我们需要告诉 indexOf() 如何比较对象。一个简单的解决方案是使用 Array.prototype.findIndex() 方法代替 indexOf() 方法,在 findIndex() 中提供一个比较函数作为参数。

----- ----- - -------------------- -- ------- --- ---
------------------- -- -

这样做可以成功找到用户 id 为 2 的索引位置,因为我们在比较函数中指定了如何根据对象的属性值进行比较。

如果您仍然想使用 indexOf() 方法,也可以将对象转换为字符串再进行比较。这种方法的缺点是效率低下,并且需要自己编写对象转换为字符串的逻辑。

示例代码

以下是一个完整的示例代码,演示如何在数组对象中正确使用 indexOf() 方法:

----- ----- - -
  - --- -- ----- ------ --
  - --- -- ----- ------ --
  - --- -- ----- ----- -
--

-- -- --------------------------- --
----- ----- - -------------------- -- ------- --- ---
------------------- -- -

-- ------------
----- ------- - ---------------- --- -- ----- ------ ---
----- ------ - -------------------- -- -------------------- --- ---------
-------------------- -- -

总结

在操作包含对象的数组时,使用 indexOf() 方法可能会遇到一些问题。为了正确地查找数组中的对象,应该使用 Array.prototype.findIndex() 或者将对象转换为字符串再进行比较。使用这些技术可以帮助您更有效地处理类似的问题。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/28836