如何将多个过滤器组合为单个过滤器函数并获得特定月份的值?



高效逻辑降低时间复杂度(n^3)并获得所有变量

  • getrewarddata是对象
  • d1,d2,d3...为变量

//Object has multiple rewards and different month
const getrewarddata = [{
month: 6,
year: 2021,
reward: 6,
},
{
month: 1,
year: 2021,
reward: 6,
},
{
month: 3,
year: 2021,
reward: 6,
},
];
//break array in particular month variable
let d3 = getrewarddata.filter((data) => data.month === 3);
let d2 = getrewarddata.filter((data) => data.month === 2);
let d1 = getrewarddata.filter((data) => data.month === 1);
console.log(d2);
console.log(d3);

我想你搜索的是分组方法。这个可以正常工作:https://stackoverflow.com/a/34890276/11139208

//Object has multiple rewards and different month
const getrewarddata = [{
month: 6,
year: 2021,
reward: 6,
},
{
month: 1,
year: 2021,
reward: 6,
},
{
month: 3,
year: 2021,
reward: 6,
},
];
var groupBy = function(xs, key) {
return xs.reduce(function(rv, x) {
(rv[x[key]] = rv[x[key]] || []).push(x);
return rv;
}, {});
};

var groupedByMonth = groupBy(getrewarddata, "month");
console.log(groupedByMonth);

唯一合理的方法是创建一个帮助器/包装器函数来跳过代码的重复。

const wrapper = (month) => getrewarddata.filter((data) => data.month === month);

然后使用这个helper/wrapper:

let d3 = wrapper(3);
let d2 = wrapper(2);
let d1 = wrapper(1);

您的代码似乎工作正常。不确定你想要达到什么目标。您可以创建一个函数来调用每个变量,以减少代码量。

const getrewarddata = [{
month: 6,
year: 2021,
reward: 6,
},
{
month: 1,
year: 2021,
reward: 6,
},
{
month: 3,
year: 2021,
reward: 6,
},
];
function filter(arr, n){
return arr.filter((data) => data.month === n)
}
let d1 = filter(getrewarddata, 1)
let d3 = filter(getrewarddata, 3)
console.log(d1)
console.log(d3)

这是另一种只需迭代数组一次的情况。

let result = getrewarddata.reduce((acc, entry) => {
if (acc[entry.month] == undefined) { 
acc[entry.month] = [entry];
} else {
acc[entry.month].push(month)
}
return acc
}, {})

这样你就得到了这样一个对象:

{
"1": [
{
"month": 1,
"year": 2021,
"reward": 6
}
],
"3": [
{
"month": 3,
"year": 2021,
"reward": 6
}
],
"6": [
{
"month": 6,
"year": 2021,
"reward": 6
}
]
}

你可以像查询普通对象一样查询

result[1]
=> [{
"month": 1,
"year": 2021,
"reward": 6
}]

最新更新