我对两个函数indexOf和在数组中查找索引之间的差异感到困惑。

文档上说

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

and

类中某个值第一次出现的索引 数组中。


当前回答

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

如果是对象数组,则findIndex(); 别的,indexOf()。

“我想在一个对象数组中找到索引,键为“橙色”。

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非常有用:在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接受回调作为参数,最好与对象数组一起使用。

const employees = [
  { id: 1, name: "John", dob: 1999 },
  { id: 2, name: "Doe", dob: 2005 },
  { id: 3, name: "Marry", dob: 2001 },
  { id: 4, name: "Larry", dob: 1990 },
]

const output = employees.findIndex((elem) => elem.name === "Doe") // 1

indexOf接受一个值作为参数。

let alphabets = ["a", "b", "c", "d", "e"]
alphabets.indexOf("c") // 2

主要的区别是这些函数的参数:

-> 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

主要的区别是这些函数的参数:

Array.prototype.indexOf()期望一个值作为第一个参数。这使得在基本类型数组(如string、number或boolean)中查找索引成为一个很好的选择。 Array.prototype.findIndex()期望将回调作为第一个参数。如果你需要非基本类型(例如对象)数组中的索引,或者你的查找条件比一个值更复杂,可以使用这个方法。

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

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

如果是对象数组,则findIndex(); 别的,indexOf()。

“我想在一个对象数组中找到索引,键为“橙色”。

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.