从数组中检索有条件的对象数量



试图找出如何从对象数组中检索最大数量的记录

假设我有一个像这样的对象数组(我减少了可读性,但可以有数百个)

[
{ name: 'Roger East',
kick_off: 2021-10-01T14:00:00.000Z
},
{ name: 'Anthony Taylor',
kick_off: 2021-10-01T14:00:00.000Z
},
{ name: 'Mike Dean',
kick_off: 2021-09-20T14:00:00.000Z
},
{ name: 'Roger East',
kick_off: 2021-09-19T14:00:00.000Z
},
{ name: 'Mike Dean',
kick_off: 2021-08-10T14:00:00.000Z
},
{ name: 'Anthony Taylor',
kick_off: 2021-08-09T14:00:00.000Z
}
] 

对于我的例子,我可能只想检索每个唯一name的1,2,3或4条记录(按最近开始日期排序,尽管它们在数组中按kick_off顺序排列,因此可能不需要该逻辑)

假设在我的原始对象中,我有100条记录是Roger East, 90条记录是Mike Dean, 50条记录是Anthony Taylor。我想返回数组中每个名称的前3条记录(希望有意义)

所以我将以

结束
[
{ name: 'Roger East',
kick_off: 2021-10-01T14:00:00.000Z
},
{ name: 'Roger East',
kick_off: 2021-10-01T14:00:00.000Z
},
{ name: 'Roger East',
kick_off: 2021-09-20T14:00:00.000Z
},
{ name: 'Mike Dean',
kick_off: 2021-09-19T14:00:00.000Z
},
{ name: 'Mike Dean',
kick_off: 2021-08-10T14:00:00.000Z
},
{ name: 'Mike Dean',
kick_off: 2021-08-10T14:00:00.000Z
},
{ name: 'Anthony Taylor',
kick_off: 2021-08-09T14:00:00.000Z
},
{ name: 'Anthony Taylor',
kick_off: 2021-08-09T14:00:00.000Z
},
{ name: 'Anthony Taylor',
kick_off: 2021-08-09T14:00:00.000Z
}
] 

感谢

给你:

let data1 = [
{
name: 'Roger East',
kick_off: '2021-10-01T14:00:00.000Z'
},
{
name: 'Anthony Taylor',
kick_off: '2021-10-01T14:00:00.000Z'
},
{
name: 'Mike Dean',
kick_off: '2021-09-20T14:00:00.000Z'
},
{
name: 'Roger East',
kick_off: '2021-09-19T14:00:00.000Z'
},
{
name: 'Mike Dean',
kick_off: '2021-08-10T14:00:00.000Z'
},
{ 
name: 'Anthony Taylor',
kick_off: '2021-08-09T14:00:00.000Z'
}
];
let data2 = [
{
name: 'Roger East',
kick_off: '2021-10-01T14:00:00.000Z'
},
{
name: 'Anthony Taylor',
kick_off: '2021-10-01T14:00:00.000Z'
},
{
name: 'Anthony Taylor',
kick_off: '2021-10-02T14:00:00.000Z'
},
{
name: 'Mike Dean',
kick_off: '2021-09-20T14:00:00.000Z'
},
{
name: 'Roger East',
kick_off: '2021-09-19T14:00:00.000Z'
},
{
name: 'Anthony Taylor',
kick_off: '2021-10-06T14:00:00.000Z'
},
{
name: 'Anthony Taylor',
kick_off: '2021-11-07T14:00:00.000Z'
},
{
name: 'Mike Dean',
kick_off: '2021-08-10T14:00:00.000Z'
},
{ 
name: 'Anthony Taylor',
kick_off: '2021-08-09T14:00:00.000Z'
},
{
name: 'Anthony Taylor',
kick_off: '2021-10-22T14:00:00.000Z'
},
{
name: 'Anthony Taylor',
kick_off: '2021-10-24T14:00:00.000Z'
},
];
const limitEachNameByNumber1 = 1;
const limitEachNameByNumber2 = 3;
function receiveFilteredData(data, limit) {
let filteredData = [];
let counter = {};

for (let record of data) {
if (!counter[record.name]) {
counter[record.name] = 0;
}

if (counter[record.name] >= limit) {
continue;
}

filteredData.push(record);
counter[record.name] ++;
}
return filteredData;
}
console.log(receiveFilteredData(data1, limitEachNameByNumber1));
console.log(receiveFilteredData(data2, limitEachNameByNumber2));

这是你可以做的mapfilter

let dataset = [{
name: 'Roger East',
kick_off: '2021-10-01T14:00:00.000Z'
},
{
name: 'Anthony Taylor',
kick_off: '2021-10-01T14:00:00.000Z'
},
{
name: 'Mike Dean',
kick_off: '2021-09-20T14:00:00.000Z'
},
{
name: 'Roger East',
kick_off: '2021-09-19T14:00:00.000Z'
},
{
name: 'Mike Dean',
kick_off: '2021-08-10T14:00:00.000Z'
},
{
name: 'Anthony Taylor',
kick_off: '2021-08-09T14:00:00.000Z'
}
]
let names = [...new Set(dataset.map(d => d.name))]
let firstuser = dataset.filter(x => x.name === names[0]) // use any index for unique entries with name
let seconduser = dataset.filter(x => x.name === names[1])
let thirduser = dataset.filter(x => x.name === names[2])
console.log({
firstuser,
seconduser,
thirduser
})

const src = [{ name: "Roger East", kick_off: "2021-10-01T14:00:00.000Z" },{ name: "Anthony Taylor", kick_off: "2021-10-01T14:00:00.000Z" },{ name: "Mike Dean", kick_off: "2021-09-20T14:00:00.000Z" },{ name: "Roger East", kick_off: "2021-09-19T14:00:00.000Z" },{ name: "Mike Dean", kick_off: "2021-08-10T14:00:00.000Z" },{ name: "Anthony Taylor", kick_off: "2021-08-09T14:00:00.000Z" },{ name: "Roger East", kick_off: "2021-10-01T14:00:00.000Z" },{ name: "Anthony Taylor", kick_off: "2021-10-01T14:00:00.000Z" },{ name: "Mike Dean", kick_off: "2021-09-20T14:00:00.000Z" },{ name: "Roger East", kick_off: "2021-09-19T14:00:00.000Z" },{ name: "Mike Dean", kick_off: "2021-08-10T14:00:00.000Z" },{ name: "Anthony Taylor", kick_off: "2021-08-09T14:00:00.000Z" },{ name: "Roger East", kick_off: "2021-10-01T14:00:00.000Z" },{ name: "Anthony Taylor", kick_off: "2021-10-01T14:00:00.000Z" },{ name: "Mike Dean", kick_off: "2021-09-20T14:00:00.000Z" },{ name: "Roger East", kick_off: "2021-09-19T14:00:00.000Z" },{ name: "Mike Dean", kick_off: "2021-08-10T14:00:00.000Z" },{ name: "Anthony Taylor", kick_off: "2021-08-09T14:00:00.000Z" }];

const byName = src.reduce((acc, {
name,
kick_off
}) => {
if (!acc[name]) {
acc[name] = [];
} else {
acc[name].push(kick_off);
}
return acc;
}, {});

const result = Object.keys(byName).map((name) => byName[name].slice(0, 3).map(kick_off => ({
name,
kick_off
}))).flat()

console.log(result)

最新更新