js对象数组按照相同时间筛选
时间: 2023-10-05 16:13:00 浏览: 175
js对象数组按属性快速排序
假设你有一个包含时间戳的对象数组,你想筛选出所有的时间戳相同的对象,可以按照以下步骤进行:
1. 首先,使用 Array.prototype.reduce() 方法将对象数组转换为一个对象,其中对象的属性是时间戳,值是包含该时间戳的所有对象的数组。
```javascript
const data = [
{ id: 1, timestamp: 1618329600, value: "foo" },
{ id: 2, timestamp: 1618329600, value: "bar" },
{ id: 3, timestamp: 1618340400, value: "baz" },
{ id: 4, timestamp: 1618340400, value: "qux" },
];
const groupedData = data.reduce((acc, obj) => {
const key = obj.timestamp;
if (!acc[key]) {
acc[key] = [];
}
acc[key].push(obj);
return acc;
}, {});
```
此时 groupedData 对象应该如下所示:
```javascript
{
1618329600: [
{ id: 1, timestamp: 1618329600, value: "foo" },
{ id: 2, timestamp: 1618329600, value: "bar" },
],
1618340400: [
{ id: 3, timestamp: 1618340400, value: "baz" },
{ id: 4, timestamp: 1618340400, value: "qux" },
],
}
```
2. 接下来,使用 Object.values() 方法获取 groupedData 对象中的所有值(即包含相同时间戳的对象数组),并将它们合并为一个数组。
```javascript
const filteredData = Object.values(groupedData).reduce((acc, arr) => acc.concat(arr), []);
```
此时 filteredData 数组应该只包含时间戳相同的对象,如下所示:
```javascript
[
{ id: 1, timestamp: 1618329600, value: "foo" },
{ id: 2, timestamp: 1618329600, value: "bar" },
{ id: 3, timestamp: 1618340400, value: "baz" },
{ id: 4, timestamp: 1618340400, value: "qux" },
]
```
阅读全文