在 JavaScript 中获取数组中对象的索引

目录

Get the index of an Object in an Array in JavaScript

  1. 在 JavaScript 中获取数组中对象的索引
  2. 使用 Array.map() 获取数组中对象的索引
  3. 获取数组中所有符合条件的对象的索引
  4. 使用获取数组中对象的索引Array.some()
  5. for使用循环获取数组中对象的索引

在 JavaScript 中获取数组中对象的索引

通过特定属性查找数组中对象的索引:

  1. 使用该findIndex()方法遍历数组。
  2. 检查每个对象是否具有具有指定值的属性。
  3. findIndex()方法将返回与条件匹配的第一个对象的索引。
索引.js
const arr = [{id: 'a'}, {id: 'b'}, {id: 'c'}]; const index = arr.findIndex(object => { return object.id === 'b'; }); console.log(index); // 👉️ 1

我们传递给Array.findIndex()方法的函数

会针对数组中的每个元素(对象)进行调用,直到它返回真值或遍历所有数组元素。

在每次迭代中,我们检查对象的属性是否等于特定值并返回trueor false

findIndex()方法返回满足条件的第一个对象的索引。

如果我们传递给该findIndex()方法的函数从未返回真值,则该方法返回-1

或者,您可以使用该Array.map()方法。

使用 Array.map() 获取数组中对象的索引

这是一个三步过程:

  1. 使用该map()方法遍历数组。
  2. 仅返回相关属性的值。
  3. 使用indexOf()方法获取对象在数组中的索引。
索引.js
const arr = [{id: 'a'}, {id: 'b'}, {id: 'c'}]; const index = arr.map(object => object.id).indexOf('c'); console.log(index); // 👉️ 2

我们使用
Array.map()
方法获取包含指定属性值的数组。

索引.js
const arr = [{id: 'a'}, {id: 'b'}, {id: 'c'}]; const values = arr.map(object => object.id) console.log(values) // 👉️ ['a', 'b', 'c']

最后一步是使用
Array.indexOf方法获取数组中值的索引。

map()方法遍历数组的所有元素,因此保留了元素的顺序。

值数组和对象数组的元素顺序相同。

indexOf方法返回满足条件的第一个对象的索引。

如果该indexOf()方法没有找到具有给定值的元素,它将返回-1,就像该findIndex()方法一样。

我还写了一篇关于
如何过滤对象数组的详细指南。

获取数组中所有符合条件的对象的索引

获取数组中所有对象的所有索引匹配条件:

  1. 使用该map()方法遍历数组。
  2. 检查每个对象是否匹配条件并返回匹配的索引。
  3. 使用该方法从数组中filter()删除所有值。undefined
索引.js
const arr = [{name: 'Alice'}, {name: 'Bob'}, {name: 'Charlie'}]; const indexes = arr .map((element, index) => { if (element.name === 'Alice' || element.name === 'Bob') { return index; } }) .filter(element => element >= 0); console.log(indexes); // 👉️ [0 , 1]

我们传递给Array.map()方法的函数

会针对数组中的每个元素(对象)进行调用。

如果满足条件,我们返回元素的索引,否则,函数隐式返回undefined

map()方法的返回值将包含满足条件的数组元素的索引和undefined每个不满足条件的元素的值。

索引.js
const arr = [{name: 'Alice'}, {name: 'Bob'}, {name: 'Charlie'}]; // 👇️ [0, 1, undefined] console.log( arr.map((element, index) => { if (element.name === 'Alice' || element.name === 'Bob') { return index; } }), );

我们使用
Array.filterundefined方法从数组中
删除值。

在传递给filter()方法的回调函数中,我们检查元素是否大于或等于0

filter方法返回一个新数组,其中包含满足条件的所有元素的索引。

您还可以使用该Array.some()方法获取数组中对象的索引。

如果您需要更新对象数组中对象的属性,请按照
本文中的说明进行操作。

获取对象在数组中的索引Array.some()

这是一个三步过程:

  1. 使用该Array.some()方法遍历数组。
  2. 检查当前对象是否具有等于指定值的属性。
  3. 如果满足条件,则将当前索引分配给一个变量。
索引.js
const arr = [{id: 'a'}, {id: 'b'}, {id: 'c'}]; let index; arr.some((object, idx) => { if (object.id === 'b') { index = idx; return true; } }); console.log(index); // 👉️ 1

我们传递给Array.some()方法的函数
被数组中的每个元素(对象)调用。

如果回调函数的至少一次调用返回真值,则该some()方法返回true,否则返回 。 false

在每次迭代中,我们检查当前对象是否具有id具有指定值的属性。

如果满足条件,我们将当前索引分配给index变量并返回true以跳出循环。

您可以将变量初始化index为不同的值,例如,-1如果您希望存储变量-1以防找不到具有指定值的对象。

索引.js
const arr = [{id: 'a'}, {id: 'b'}, {id: 'c'}]; let index = -1; arr.some((object, idx) => { if (object.id === 'ASDF') { index = idx; return true; } }); console.log(index); // 👉️ -1

数组中没有对象满足条件,因此index变量保持设置为-1

想了解更多关于在 JavaScript 中使用对象数组的信息吗? 查看这些资源: 从 JavaScript 中的对象数组中删除重复项将对象数组转换为 JS 中的值数组

for使用循环获取数组中对象的索引

这是一个三步过程:

  1. 使用for循环遍历数组。
  2. 检查当前对象是否具有指定值的属性。
  3. 如果满足条件,则将当前索引分配给一个变量。



索引.js
const arr = [{id: 'a'}, {id: 'b'}, {id: 'c'}]; let index; for (let idx = 0; idx < arr.length; idx++) { if (arr[idx].id === 'b') { index = idx; break; } } console.log(index); // 👉️ 1

我们使用for循环来遍历对象数组。

在每次迭代中,我们检查当前对象是否具有id等于特定值的属性。

如果满足条件,我们将当前索引分配给一个变量并退出循环
for

break语句用于提前结束for循环以避免不必要的迭代。

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: