目录
Get the index of an Object in an Array in JavaScript
- 在 JavaScript 中获取数组中对象的索引
- 使用 Array.map() 获取数组中对象的索引
- 获取数组中所有符合条件的对象的索引
- 使用获取数组中对象的索引
Array.some()
for
使用循环获取数组中对象的索引
在 JavaScript 中获取数组中对象的索引
通过特定属性查找数组中对象的索引:
- 使用该
findIndex()
方法遍历数组。 - 检查每个对象是否具有具有指定值的属性。
- 该
findIndex()
方法将返回与条件匹配的第一个对象的索引。
const arr = [{id: 'a'}, {id: 'b'}, {id: 'c'}]; const index = arr.findIndex(object => { return object.id === 'b'; }); console.log(index); // 👉️ 1
我们传递给Array.findIndex()方法的函数
会针对数组中的每个元素(对象)进行调用,直到它返回真值或遍历所有数组元素。
true
or false
。该findIndex()
方法返回满足条件的第一个对象的索引。
如果我们传递给该findIndex()
方法的函数从未返回真值,则该方法返回-1
。
或者,您可以使用该Array.map()
方法。
使用 Array.map() 获取数组中对象的索引
这是一个三步过程:
- 使用该
map()
方法遍历数组。 - 仅返回相关属性的值。
- 使用
indexOf()
方法获取对象在数组中的索引。
const arr = [{id: 'a'}, {id: 'b'}, {id: 'c'}]; const index = arr.map(object => object.id).indexOf('c'); console.log(index); // 👉️ 2
我们使用
Array.map()
方法获取包含指定属性值的数组。
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()
方法一样。
我还写了一篇关于
如何过滤对象数组的详细指南。
获取数组中所有符合条件的对象的索引
获取数组中所有对象的所有索引匹配条件:
- 使用该
map()
方法遍历数组。 - 检查每个对象是否匹配条件并返回匹配的索引。
- 使用该方法从数组中
filter()
删除所有值。undefined
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
每个不满足条件的元素的值。
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()
这是一个三步过程:
- 使用该
Array.some()
方法遍历数组。 - 检查当前对象是否具有等于指定值的属性。
- 如果满足条件,则将当前索引分配给一个变量。
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
以防找不到具有指定值的对象。
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
。
for
使用循环获取数组中对象的索引
这是一个三步过程:
- 使用
for
循环遍历数组。 - 检查当前对象是否具有指定值的属性。
- 如果满足条件,则将当前索引分配给一个变量。
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
循环以避免不必要的迭代。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: