数组的indexOf和findIndex函数的区别

IT技术 javascript
2021-03-08 23:30:07

我对两个函数 indexOf 和 find Index in an array 之间的区别感到困惑。

文档说

findIndex - 返回数组中 predicate 为真的第一个元素的索引,否则返回 -1。

indexOf - 返回值在数组中第一次出现的索引。

6个回答

主要区别在于这些函数的参数:

  • Array.prototype.indexOf()期望一个作为第一个参数。这使得在基本类型(如字符串、数字或布尔值)的数组中查找索引是一个不错的选择

  • Array.prototype.findIndex()期望回调作为第一个参数。如果您需要具有非原始类型(例如对象)的数组中的索引,或者您的查找条件比值更复杂,请使用此选项。

有关这两种情况的示例,请参阅链接。

如果有人想知道什么是 js 的原始类型,那么它们就是字符串、数字、布尔值之类的东西。
2021-04-16 23:30:07
请注意,这indexOf将有助于查找对象。重要的是要区分它接受单个对象,而不仅仅是一个值,并且通过相等而不是值进行比较。Per Mozilla 文档: indexOf() compares searchElement to elements of the Array using strict equality (the same method used by the === or triple-equals operator). 请修改findIndex解释以仅包含“或您的查找条件比仅单个值或引用更复杂”肢体以纠正这一点,因为它最初使我误入歧途。谢谢!
2021-04-18 23:30:07
@brokenalarms 这是真的,但前提是您有对数组中实际对象的引用。例如,虽然[{a:1}].indexOf({a:1})返回-1的对象似乎相同(但事实并非如此)。不确定此信息是否对答案有帮助,因为它可能会令人困惑。如果您需要了解更多关于确切语言行为的信息,您应该阅读规范。
2021-04-21 23:30:07
然而值得注意的是,它.indexOf(NaN)总是会返回,-1因为NaN==NaNis always falseNaN 原始类型,因为typeof NaNnumber,所以是nullundefined,所以我会修改它以避免说indexOf对原始类型有效
2021-04-27 23:30:07
此外,indexOf() 使用严格相等(与 === 或三重相等运算符使用的方法相同)将 searchElement 与 Array 的元素进行比较。
2021-05-10 23:30:07

如果要查找与谓词匹配的第一个元素,FindIndex 很有用:在 W3C 的示例中,如果客户的年龄大于或等于 18,则有数字和匹配项。

var ages = [3, 10, 18, 20];

function checkAdult(age) {
    return age >= 18;
}

console.log(ages.findIndex(checkAdult));

安慰:

2

您可以使用 Array 的 indexOf 函数找到确切的元素索引,但不能传递谓词。如果要查找特定元素,速度会更快:

var ages = [3, 10, 18, 20];
console.log(ages.indexOf(10));

返回:

1

索引计数从 0 开始,因此第一个元素索引为 0。

简单 - 您使用的是哪种数组结构?

  • 如果对象数组,findIndex();
  • 否则,indexOf()

“我想在对象数组中找到索引,键为“Orange”。

let fruits = [
   { type: "Apple", quantity: 9 },
   { type: "Banana", quantity: 2},
   { type: "Orange", quantity: 8},
   { type: "Pear", quantity: 777}
];

let myIndex = fruits.findIndex(fruit => fruit.type === "Orange"); // Returns 2.

“我想在一个简单的数组中找到索引”。

let fruits = [ "Apple", "Banana", "Pear", "Orange"];

let index = fruits.indexOf("Orange"); // Returns 3.

另一个区别是使用findIndex()用户可以应用一些函数并在数组中找到通过测试的元素。

indexOf()运算符并非如此用户可以只检查特定元素是否存在于数组中。

主要区别在于这些函数的参数:

-> Array.prototype.indexOf()

   var fruits = ["Banana", "Orange", "Apple", "Mango"];
   var a = fruits.indexOf("Apple");
   The result of a will be: 2

-> Array.prototype.findIndex()

       var ages = [3, 10, 18, 20];

       function checkAdult(age) {
        return age >= 18;
       }

       function myFunction() {
         document.getElementById("demo").innerHTML = 
         ages.findIndex(checkAdult);
       }

       The result will be: 2