js对象数组计算总计
Knowing how to quickly iterate through an array and count objects is deceptively simple. The length()
method will tell you the total number of values in the array, but what if you only want to count those values based on certain conditions?
知道如何快速遍历数组并对对象计数很简单。 length()
方法将告诉您数组中值的总数,但是如果您只想根据某些条件对这些值进行计数怎么办?
For example, imagine you have an array like this:
例如,假设您有一个像这样的数组:
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];
And you only want to count the number of objects with status
set to '0'
.
而且,您只想计算status
设置为'0'
的对象的数量。
Like with just about everything in programming, there are a number of ways to do this. We’ll go through a few of the common methods below.
就像编程中的几乎所有内容一样,有很多方法可以做到这一点。 我们将介绍以下几种常见方法。
使用for
循环 (Use a for
loop)
Probably the easiest way would be to declare a counter
variable, loop through the array, and iterate counter
only if status
is equal to '0'
:
可能最简单的方法是声明一个counter
变量,循环遍历数组,仅在status
等于'0'
时才迭代counter
:
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];
let counter = 0;
for (let i = 0; i < storage.length; i++) {
if (storage[i].status === '0') counter++;
}
console.log(counter); // 6
You could simplify this a bit by using a for...of
loop:
您可以使用for...of
循环将其简化一些:
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];
let counter = 0;
for (const obj of storage) {
if (obj.status === '0') counter++;
}
console.log(counter); // 6
Also, you could create a function to do the same thing if you have other arrays of objects to count conditionally:
另外,如果您有其他对象数组有条件地计数,则可以创建一个函数来执行相同的操作:
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];
function statusCounter(inputs) {
let counter = 0;
for (const input of inputs) {
if (input.status === '0') counter += 1;
}
return counter;
}
statusCounter(storage); // 6
使用数组方法 (Use array methods)
JavaScript includes a bunch of helpful methods when working with arrays. Each one can be chained to an array and passed different parameters to work with while iterating through the elements in the array.
在使用数组时,JavaScript包括许多有用的方法 。 每个对象都可以链接到一个数组,并传递不同的参数以在迭代数组中的元素时使用。
The two we’ll look at are filter()
and reduce()
.
我们要看的两个是filter()
和reduce()
。
filter()
(filter()
)
The filter method does just that – it iterates through each element in the array and filters out all elements that don’t meet the condition(s) you provide. It then returns a new array with all the elements that returned true based on your condition(s).
filter方法就是这样做的–遍历数组中的每个元素,并过滤掉所有不符合您提供的条件的元素。 然后,它将返回一个新数组,其中包含根据您的条件返回true的所有元素。
For example:
例如:
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];
const count = storage.filter(function(item){
if (item.status === 0) {
return true;
} else {
return false;
}
});
/*
[
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' }
]
*/
Now that you’ve filtered out the object with status: '1'
, just call the length()
method on the new array to get the total count of objects with status: '1'
:
现在,您已经过滤掉了status: '1'
的对象,只需在新数组上调用length()
方法即可获取status: '1'
的对象的总数:
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];
const count = storage.filter(function(item){
if (item.status === 0) {
return true;
} else {
return false;
}
}).length; // 6
But this can be shortened a lot with ES6 syntax:
但这可以通过ES6语法大大缩短:
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];
const count = storage.filter(item => item.status === '0').length; // 6
reduce()
(reduce()
)
Think of the reduce()
method like a Swiss army knife – it’s extremely flexible, and lets you take an array as input and transform it into just about anything. Even better, like filter()
, this method returns a new array, leaving the original unchanged.
将reduce()
方法想像成瑞士军刀一样,它非常灵活,可以让您将数组作为输入并将其转换为几乎任何东西。 更好的是,像filter()
,此方法返回一个新数组,而原始数组保持不变。
You can read more about reduce()
in this article.
您可以在本文中阅读有关reduce()
更多信息。
For our purposes, we want to take an array, examine its contents, and produce a number. Here’s a simple way to do that:
为了我们的目的,我们想要一个数组,检查它的内容,并产生一个数字。 这是一种简单的方法:
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];
const count = storage.reduce((counter, obj) => {
if (obj.status === '0') counter += 1
return counter;
}, 0); // 6
You could simplify further by using ES6 syntax and a ternary operator:
您可以使用ES6语法和三元运算符进一步简化操作:
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];
const count = storage.reduce((counter, obj) => obj.status === '0' ? counter += 1 : counter, 0); // 6
And even a bit more by using object destructuring:
通过使用对象分解 ,甚至更多:
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];
const count = storage.reduce((counter, { status }) => status === '0' ? counter += 1 : counter, 0); // 6
So those are a few ways to go through the elements of an array and count them conditionally. Now get out there and count with confidence!
因此,这些是通过数组的元素并有条件地对其进行计数的几种方法。 现在走到那里,充满信心地计数!
翻译自: https://www.freecodecamp.org/news/how-to-count-objects-in-an-array/
js对象数组计算总计