目录
Filter an Array of Objects based on a property – JavaScript
根据 JavaScript 中的属性过滤对象数组
要根据属性过滤对象数组:
- 使用该
Array.filter()
方法遍历数组。 - 在每次迭代中,检查对象的属性是否指向指定值。
- 该
Array.filter()
方法将返回一个数组,其中包含满足条件的所有对象。
const people = [ {name: 'Tom', age: 30}, {name: 'John', age: 40}, {name: 'Dillon', age: 30}, ]; const results = people.filter(obj => { return obj.age === 30; }); // 👇️ [{name: 'Tom', age: 30}, {name: 'Dillon', age: 30}] console.log(results);
我们传递给Array.filter方法的函数
会针对数组中的每个元素进行调用。
在每次迭代中,我们检查对象是否具有age
值为 的属性
30
。如果是,则该对象被添加到新数组中。
Array.filter()
方法返回一个空数组。您可以使用数组的长度来检查是否至少有一个对象符合条件。
if (results.length > 0) { // 👉️ the condition was satisfied at least once }
如果您只需要筛选满足条件的单个对象,请使用该
Array.find()
方法。
根据使用的属性过滤对象数组Array.find()
这是一个三步过程:
- 使用该
Array.find()
方法遍历数组。 - 在每次迭代中,检查对象的属性是否指向特定值。
- 该
find()
方法将返回满足条件的第一个对象。
const people = [ {name: 'Tom', age: 30}, {name: 'John', age: 40}, {name: 'Dillon', age: 30}, ]; const person = people.find(object => { return object.age === 30; }); // 👉️ {name: 'Tom', age: 30} console.log(person); if (person !== undefined) { // 👉️ the condition was satisfied }
我们传递给
Array.find()
方法的函数会针对数组中的每个元素进行调用,直到它返回真值或遍历整个数组。
一旦回调函数返回真值,相应的数组元素就会从Array.find()
.
如果回调函数从不返回真值,则Array.find()
返回undefined
。
即使数组中有多个对象具有age
值为 的属性,在方法短路30
之前也只会返回第一个对象
。Array.find()
根据使用的属性过滤对象数组for...of
您还可以使用for...of
循环来根据属性过滤对象数组。
const people = [ {name: 'Tom', age: 30}, {name: 'John', age: 40}, {name: 'Dillon', age: 30}, ]; const results = []; for (const person of people) { if (person.age === 30) { results.push(person); } } // 👇️ [{name: 'Tom', age: 31}, {name: 'Dillon', age: 30}] console.log(results);
for …of语句用于循环遍历可迭代对象,如数组、字符串Map
、Set
和
NodeList
对象generators
。
在每次迭代中,我们检查当前对象是否满足条件,如果条件满足,我们
将对象推入一个新数组。
如果您只需要过滤单个对象,请使用该break
语句。
const people = [ {name: 'Tom', age: 30}, {name: 'John', age: 40}, {name: 'Dillon', age: 30}, ]; let result; for (const person of people) { if (person.age === 30) { result = person; break; } } // 👇️ { name: 'Tom', age: 30 } console.log(result);
我们使用let
关键字来声明一个result
可以重新分配的变量。
在每次迭代中,我们检查当前对象是否满足条件。
如果满足条件,我们将变量设置为对象并跳出循环。
break
语句终止当前循环或语句switch
。
根据使用的属性过滤对象数组forEach
您还可以使用该forEach()
方法根据属性过滤对象数组。
const people = [ {name: 'Tom', age: 30}, {name: 'John', age: 40}, {name: 'Dillon', age: 30}, ]; const results = []; people.forEach((person, index) => { console.log(index); // 👉️ 0, 1, 2 if (person.age === 30) { results.push(person); } }); // 👇️ [{name: 'Tom', age: 31}, {name: 'Dillon', age: 30}] console.log(results);
我们传递给Array.forEach方法的函数
会针对数组中的每个元素进行调用。
在每次迭代中,我们检查当前对象是否具有等于指定值的属性。
如果满足条件,我们将对象推入一个新数组。
使用 时,您还可以访问index
当前迭代的
forEach()
。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: