使用多个循环检查 javascript 中的多个条件
Using multiple loops to check multiple conditions in javascript
在过去的几个小时里,我的头一直在受伤,试图解决我遇到的这个问题。我觉得我正在以一种非常不必要的艰难方式接近它。
我正在尝试执行以下操作:
fullRoutine 是一个数组,如下所示:
0: {html: {…}, category: "prehab", freq: 4}
1: {html: {…}, category: "prehab", freq: 4}
2: {html: {…}, category: "prehab", freq: 4}
3: {html: {…}, category: "prehab", freq: 4}
4: {html: {…}, category: "prehab", freq: 2}
5: {html: {…}, category: "prehab", freq: 2}
6: {html: {…}, category: "prehab", freq: 2}
7: {html: {…}, category: "prehab", freq: 2}
8: {html: {…}, category: "prehab", freq: 2}
9: {html: {…}, category: "prehab", freq: 2}
10: {html: {…}, category: "skillTechnique", freq: 2}
11: {html: {…}, category: "skillTechnique", freq: 2}
12: {html: {…}, category: "skillTechnique", freq: 2}
13: {html: {…}, category: "skillTechnique", freq: 2}
14: {html: {…}, category: "skillTechnique", freq: 2}
15: {html: {…}, category: "skillTechnique", freq: 2}
16: {html: {…}, category: "skillTechnique", freq: 2}
17: {html: {…}, category: "skillTechnique", freq: 2}
18: {html: {…}, category: "upperbody_strengthPrimary", freq: 1}
19: {html: {…}, category: "upperbody_strengthPrimary", freq: 1}
20: {html: {…}, category: "upperbody_strengthPrimary", freq: 1}
21: {html: {…}, category: "upperbody_strengthPrimary", freq: 1}
22: {html: {…}, category: "upperbody_strengthPrimary", freq: 1}
23: {html: {…}, category: "lowerbody_strengthPrimary", freq: 1}
24: {html: {…}, category: "lowerbody_strengthPrimary", freq: 1}
25: {html: {…}, category: "upperbody_strengthSecondary", freq: 1}
26: {html: {…}, category: "upperbody_strengthSecondary", freq: 1}
27: {html: {…}, category: "upperbody_strengthSecondary", freq: 1}
28: {html: {…}, category: "upperbody_strengthSecondary", freq: 1}
29: {html: {…}, category: "upperbody_strengthSecondary", freq: 1}
30: {html: {…}, category: "lowerbody_strengthSecondary", freq: 1}
31: {html: {…}, category: "lowerbody_strengthSecondary", freq: 1}
32: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
33: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
34: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
35: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
36: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
37: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
38: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
39: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
40: {html: {…}, category: "lowerbody_strengthIsolation", freq: 1}
41: {html: {…}, category: "lowerbody_strengthIsolation", freq: 1}
42: {html: {…}, category: "lowerbody_strengthIsolation", freq: 2}
43: {html: {…}, category: "lowerbody_strengthIsolation", freq: 2}
44: {html: {…}, category: "mobility", freq: 2}
45: {html: {…}, category: "mobility", freq: 2}
46: {html: {…}, category: "mobility", freq: 2}
47: {html: {…}, category: "mobility", freq: 2}
这是 Max 对象:
const max = {
prehab: 2,
skillTechnique: 2,
upperbody_strengthPrimary: 2,
lowerbody_strengthPrimary: 2,
upperbody_strengthSecondary: 2,
lowerbody_strengthSecondary: 2,
upperbody_strengthIsolation: 2,
lowerbody_strengthIsolation: 2,
mobility: 1
};
这是 dailyFrequency 函数:
function dailyFrequency(day) {
const usesDaily = {};
for (const { category } of day) {
usesDaily[category] = (usesDaily[category] || 0) + 1;
}
// console.log("Daily frequency measurer:");
// console.log(usesDaily);
return usesDaily;
}
我的想法很简单。我想将 fullRoutine 数组解析为多个较小的数组。 max 对象包含每个数组项的类别 max。例如。类别为 "prehab" 的 fullRoutine 数组中的项在新创建的数组中只允许被解析 2 次。之后,必须为剩余的两个创建一个新数组。
不要被 fullRoutine 数组中的 freq 属性 搞糊涂了。与此无关。
我现在使用 dailyFrequency 函数来测量 fullRoutine 数组中的频率。我对这个问题的解决方案让我无处可去:
const contains = [];
for (let i = 0; i < fullRoutine.length; i++) {
for (let freqKey in dailyFrequency(contains)) {
for (let maxKey in max) {
if (fullRoutine[i].category === freqKey) {
console.log("yes?");
if (freqKey === maxKey) {
if (max[maxKey] < dailyFrequency(contains)[freqKey]) {
contains.push(fullRoutine[i]);
}
}
}
}
}
}
我觉得有一种更简单的方法可以解决这个问题而不会爆头。先感谢您。
编辑:
我试图从中得到的第一个小数组是:
0: {html: {…}, category: "prehab", freq: 4}
1: {html: {…}, category: "prehab", freq: 4}
2: {html: {…}, category: "skillTechnique", freq: 2}
3: {html: {…}, category: "skillTechnique", freq: 2}
4: {html: {…}, category: "upperbody_strengthPrimary", freq: 1}
5: {html: {…}, category: "upperbody_strengthPrimary", freq: 1}
6: {html: {…}, category: "lowerbody_strengthPrimary", freq: 1}
7: {html: {…}, category: "lowerbody_strengthPrimary", freq: 1}
8: {html: {…}, category: "upperbody_strengthSecondary", freq: 1}
9: {html: {…}, category: "upperbody_strengthSecondary", freq: 1}
10: {html: {…}, category: "lowerbody_strengthSecondary", freq: 1}
11: {html: {…}, category: "lowerbody_strengthSecondary", freq: 1}
12: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
13: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
14: {html: {…}, category: "lowerbody_strengthIsolation", freq: 1}
15: {html: {…}, category: "lowerbody_strengthIsolation", freq: 1}
16: {html: {…}, category: "mobility", freq: 2}
使用 .filter()
筛选对象并使用 .slice()
切片第一个 n。
var fullRoutine = [{
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "lowerbody_strengthPrimary",
}, {
category: "lowerbody_strengthPrimary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "lowerbody_strengthSecondary",
}, {
category: "lowerbody_strengthSecondary",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "lowerbody_strengthIsolation",
}, {
category: "lowerbody_strengthIsolation",
}, {
category: "lowerbody_strengthIsolation",
}, {
category: "lowerbody_strengthIsolation",
}, {
category: "mobility",
}, {
category: "mobility",
}, {
category: "mobility",
}, {
category: "mobility",
}];
const max = {
prehab: 2,
skillTechnique: 2,
upperbody_strengthPrimary: 2,
lowerbody_strengthPrimary: 2,
upperbody_strengthSecondary: 2,
lowerbody_strengthSecondary: 2,
upperbody_strengthIsolation: 2,
lowerbody_strengthIsolation: 2,
mobility: 1
};
var newarr = [];
Object.entries(max).forEach(e => {
newarr.push(
fullRoutine.filter(o => o.category === e[0])
.slice(0,e[1])
);
});
console.log(newarr);
这是第一个小阵列。我还是不明白其他数组里有什么?
可能这个应该更清楚:
const smallerArrays = fullRoutine.reduce((acc,elm)=>
{
let Nbr = (acc.filter(element=>( element.category===elm.category))).length
if (Nbr < max[elm.category] ) { acc.push(elm) }
return acc
}, [] )
const fullRoutine =
[ { html: {x:'x'}, category: 'prehab', freq: 4 }
, { html: {x:'x'}, category: 'prehab', freq: 4 }
, { html: {x:'x'}, category: 'prehab', freq: 4 }
, { html: {x:'x'}, category: 'prehab', freq: 4 }
, { html: {x:'x'}, category: 'prehab', freq: 2 }
, { html: {x:'x'}, category: 'prehab', freq: 2 }
, { html: {x:'x'}, category: 'prehab', freq: 2 }
, { html: {x:'x'}, category: 'prehab', freq: 2 }
, { html: {x:'x'}, category: 'prehab', freq: 2 }
, { html: {x:'x'}, category: 'prehab', freq: 2 }
, { html: {x:'x'}, category: 'skillTechnique', freq: 2 }
, { html: {x:'x'}, category: 'skillTechnique', freq: 2 }
, { html: {x:'x'}, category: 'skillTechnique', freq: 2 }
, { html: {x:'x'}, category: 'skillTechnique', freq: 2 }
, { html: {x:'x'}, category: 'skillTechnique', freq: 2 }
, { html: {x:'x'}, category: 'skillTechnique', freq: 2 }
, { html: {x:'x'}, category: 'skillTechnique', freq: 2 }
, { html: {x:'x'}, category: 'skillTechnique', freq: 2 }
, { html: {x:'x'}, category: 'upperbody_strengthPrimary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthPrimary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthPrimary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthPrimary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthPrimary', freq: 1 }
, { html: {x:'x'}, category: 'lowerbody_strengthPrimary', freq: 1 }
, { html: {x:'x'}, category: 'lowerbody_strengthPrimary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthSecondary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthSecondary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthSecondary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthSecondary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthSecondary', freq: 1 }
, { html: {x:'x'}, category: 'lowerbody_strengthSecondary', freq: 1 }
, { html: {x:'x'}, category: 'lowerbody_strengthSecondary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'upperbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'upperbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'upperbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'upperbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'upperbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'upperbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'upperbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'lowerbody_strengthIsolation', freq: 1 }
, { html: {x:'x'}, category: 'lowerbody_strengthIsolation', freq: 1 }
, { html: {x:'x'}, category: 'lowerbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'lowerbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'mobility', freq: 2 }
, { html: {x:'x'}, category: 'mobility', freq: 2 }
, { html: {x:'x'}, category: 'mobility', freq: 2 }
, { html: {x:'x'}, category: 'mobility', freq: 2 }
];
const max = {
prehab: 2,
skillTechnique: 2,
upperbody_strengthPrimary: 2,
lowerbody_strengthPrimary: 2,
upperbody_strengthSecondary: 2,
lowerbody_strengthSecondary: 2,
upperbody_strengthIsolation: 2,
lowerbody_strengthIsolation: 2,
mobility: 1
};
const smallerArrays = fullRoutine.reduce((acc,elm)=>
{
let Nbr = (acc.filter(element=>( element.category===elm.category))).length
if (Nbr < max[elm.category] ) { acc.push(elm) }
return acc
}, [] )
// show result :
for (let idx in smallerArrays )
{
console.log( idx , '=>', JSON.stringify( smallerArrays[idx] ) );
}
好的,这是我倒多杯水的第二个答案。
请注意,这里有空数组,因为没有更多的水可以倒了。您可以轻松过滤掉它们。
var fullRoutine = [{
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "lowerbody_strengthPrimary",
}, {
category: "lowerbody_strengthPrimary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "lowerbody_strengthSecondary",
}, {
category: "lowerbody_strengthSecondary",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "lowerbody_strengthIsolation",
}, {
category: "lowerbody_strengthIsolation",
}, {
category: "lowerbody_strengthIsolation",
}, {
category: "lowerbody_strengthIsolation",
}, {
category: "mobility",
}, {
category: "mobility",
}, {
category: "mobility",
}, {
category: "mobility",
}];
const max = {
prehab: 2,
skillTechnique: 2,
upperbody_strengthPrimary: 2,
lowerbody_strengthPrimary: 2,
upperbody_strengthSecondary: 2,
lowerbody_strengthSecondary: 2,
upperbody_strengthIsolation: 2,
lowerbody_strengthIsolation: 2,
mobility: 1
};
var newarrs = [];
var i = 0;
while (fullRoutine.length) { //if the bottle still has water
newarrs.push([]); //get a new cup
Object.entries(max).forEach(e => { //pour different waters
newarrs[i].push(//add water to cup
fullRoutine.filter(o => o.category === e[0])
.slice(0,e[1])
);
fullRoutine = //remove water from bottle
fullRoutine.filter(o => o.category === e[0])
.slice(e[1])
.concat(fullRoutine
.filter(o => o.category !== e[0]));
});
i++; //get ready for another cup
}
console.log(newarrs);
基本上,倒水后,瓶子会像预期的那样失去一些水。
在过去的几个小时里,我的头一直在受伤,试图解决我遇到的这个问题。我觉得我正在以一种非常不必要的艰难方式接近它。
我正在尝试执行以下操作:
fullRoutine 是一个数组,如下所示:
0: {html: {…}, category: "prehab", freq: 4}
1: {html: {…}, category: "prehab", freq: 4}
2: {html: {…}, category: "prehab", freq: 4}
3: {html: {…}, category: "prehab", freq: 4}
4: {html: {…}, category: "prehab", freq: 2}
5: {html: {…}, category: "prehab", freq: 2}
6: {html: {…}, category: "prehab", freq: 2}
7: {html: {…}, category: "prehab", freq: 2}
8: {html: {…}, category: "prehab", freq: 2}
9: {html: {…}, category: "prehab", freq: 2}
10: {html: {…}, category: "skillTechnique", freq: 2}
11: {html: {…}, category: "skillTechnique", freq: 2}
12: {html: {…}, category: "skillTechnique", freq: 2}
13: {html: {…}, category: "skillTechnique", freq: 2}
14: {html: {…}, category: "skillTechnique", freq: 2}
15: {html: {…}, category: "skillTechnique", freq: 2}
16: {html: {…}, category: "skillTechnique", freq: 2}
17: {html: {…}, category: "skillTechnique", freq: 2}
18: {html: {…}, category: "upperbody_strengthPrimary", freq: 1}
19: {html: {…}, category: "upperbody_strengthPrimary", freq: 1}
20: {html: {…}, category: "upperbody_strengthPrimary", freq: 1}
21: {html: {…}, category: "upperbody_strengthPrimary", freq: 1}
22: {html: {…}, category: "upperbody_strengthPrimary", freq: 1}
23: {html: {…}, category: "lowerbody_strengthPrimary", freq: 1}
24: {html: {…}, category: "lowerbody_strengthPrimary", freq: 1}
25: {html: {…}, category: "upperbody_strengthSecondary", freq: 1}
26: {html: {…}, category: "upperbody_strengthSecondary", freq: 1}
27: {html: {…}, category: "upperbody_strengthSecondary", freq: 1}
28: {html: {…}, category: "upperbody_strengthSecondary", freq: 1}
29: {html: {…}, category: "upperbody_strengthSecondary", freq: 1}
30: {html: {…}, category: "lowerbody_strengthSecondary", freq: 1}
31: {html: {…}, category: "lowerbody_strengthSecondary", freq: 1}
32: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
33: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
34: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
35: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
36: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
37: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
38: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
39: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
40: {html: {…}, category: "lowerbody_strengthIsolation", freq: 1}
41: {html: {…}, category: "lowerbody_strengthIsolation", freq: 1}
42: {html: {…}, category: "lowerbody_strengthIsolation", freq: 2}
43: {html: {…}, category: "lowerbody_strengthIsolation", freq: 2}
44: {html: {…}, category: "mobility", freq: 2}
45: {html: {…}, category: "mobility", freq: 2}
46: {html: {…}, category: "mobility", freq: 2}
47: {html: {…}, category: "mobility", freq: 2}
这是 Max 对象:
const max = {
prehab: 2,
skillTechnique: 2,
upperbody_strengthPrimary: 2,
lowerbody_strengthPrimary: 2,
upperbody_strengthSecondary: 2,
lowerbody_strengthSecondary: 2,
upperbody_strengthIsolation: 2,
lowerbody_strengthIsolation: 2,
mobility: 1
};
这是 dailyFrequency 函数:
function dailyFrequency(day) {
const usesDaily = {};
for (const { category } of day) {
usesDaily[category] = (usesDaily[category] || 0) + 1;
}
// console.log("Daily frequency measurer:");
// console.log(usesDaily);
return usesDaily;
}
我的想法很简单。我想将 fullRoutine 数组解析为多个较小的数组。 max 对象包含每个数组项的类别 max。例如。类别为 "prehab" 的 fullRoutine 数组中的项在新创建的数组中只允许被解析 2 次。之后,必须为剩余的两个创建一个新数组。
不要被 fullRoutine 数组中的 freq 属性 搞糊涂了。与此无关。
我现在使用 dailyFrequency 函数来测量 fullRoutine 数组中的频率。我对这个问题的解决方案让我无处可去:
const contains = [];
for (let i = 0; i < fullRoutine.length; i++) {
for (let freqKey in dailyFrequency(contains)) {
for (let maxKey in max) {
if (fullRoutine[i].category === freqKey) {
console.log("yes?");
if (freqKey === maxKey) {
if (max[maxKey] < dailyFrequency(contains)[freqKey]) {
contains.push(fullRoutine[i]);
}
}
}
}
}
}
我觉得有一种更简单的方法可以解决这个问题而不会爆头。先感谢您。
编辑: 我试图从中得到的第一个小数组是:
0: {html: {…}, category: "prehab", freq: 4}
1: {html: {…}, category: "prehab", freq: 4}
2: {html: {…}, category: "skillTechnique", freq: 2}
3: {html: {…}, category: "skillTechnique", freq: 2}
4: {html: {…}, category: "upperbody_strengthPrimary", freq: 1}
5: {html: {…}, category: "upperbody_strengthPrimary", freq: 1}
6: {html: {…}, category: "lowerbody_strengthPrimary", freq: 1}
7: {html: {…}, category: "lowerbody_strengthPrimary", freq: 1}
8: {html: {…}, category: "upperbody_strengthSecondary", freq: 1}
9: {html: {…}, category: "upperbody_strengthSecondary", freq: 1}
10: {html: {…}, category: "lowerbody_strengthSecondary", freq: 1}
11: {html: {…}, category: "lowerbody_strengthSecondary", freq: 1}
12: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
13: {html: {…}, category: "upperbody_strengthIsolation", freq: 2}
14: {html: {…}, category: "lowerbody_strengthIsolation", freq: 1}
15: {html: {…}, category: "lowerbody_strengthIsolation", freq: 1}
16: {html: {…}, category: "mobility", freq: 2}
使用 .filter()
筛选对象并使用 .slice()
切片第一个 n。
var fullRoutine = [{
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "lowerbody_strengthPrimary",
}, {
category: "lowerbody_strengthPrimary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "lowerbody_strengthSecondary",
}, {
category: "lowerbody_strengthSecondary",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "lowerbody_strengthIsolation",
}, {
category: "lowerbody_strengthIsolation",
}, {
category: "lowerbody_strengthIsolation",
}, {
category: "lowerbody_strengthIsolation",
}, {
category: "mobility",
}, {
category: "mobility",
}, {
category: "mobility",
}, {
category: "mobility",
}];
const max = {
prehab: 2,
skillTechnique: 2,
upperbody_strengthPrimary: 2,
lowerbody_strengthPrimary: 2,
upperbody_strengthSecondary: 2,
lowerbody_strengthSecondary: 2,
upperbody_strengthIsolation: 2,
lowerbody_strengthIsolation: 2,
mobility: 1
};
var newarr = [];
Object.entries(max).forEach(e => {
newarr.push(
fullRoutine.filter(o => o.category === e[0])
.slice(0,e[1])
);
});
console.log(newarr);
这是第一个小阵列。我还是不明白其他数组里有什么?
可能这个应该更清楚:
const smallerArrays = fullRoutine.reduce((acc,elm)=>
{
let Nbr = (acc.filter(element=>( element.category===elm.category))).length
if (Nbr < max[elm.category] ) { acc.push(elm) }
return acc
}, [] )
const fullRoutine =
[ { html: {x:'x'}, category: 'prehab', freq: 4 }
, { html: {x:'x'}, category: 'prehab', freq: 4 }
, { html: {x:'x'}, category: 'prehab', freq: 4 }
, { html: {x:'x'}, category: 'prehab', freq: 4 }
, { html: {x:'x'}, category: 'prehab', freq: 2 }
, { html: {x:'x'}, category: 'prehab', freq: 2 }
, { html: {x:'x'}, category: 'prehab', freq: 2 }
, { html: {x:'x'}, category: 'prehab', freq: 2 }
, { html: {x:'x'}, category: 'prehab', freq: 2 }
, { html: {x:'x'}, category: 'prehab', freq: 2 }
, { html: {x:'x'}, category: 'skillTechnique', freq: 2 }
, { html: {x:'x'}, category: 'skillTechnique', freq: 2 }
, { html: {x:'x'}, category: 'skillTechnique', freq: 2 }
, { html: {x:'x'}, category: 'skillTechnique', freq: 2 }
, { html: {x:'x'}, category: 'skillTechnique', freq: 2 }
, { html: {x:'x'}, category: 'skillTechnique', freq: 2 }
, { html: {x:'x'}, category: 'skillTechnique', freq: 2 }
, { html: {x:'x'}, category: 'skillTechnique', freq: 2 }
, { html: {x:'x'}, category: 'upperbody_strengthPrimary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthPrimary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthPrimary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthPrimary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthPrimary', freq: 1 }
, { html: {x:'x'}, category: 'lowerbody_strengthPrimary', freq: 1 }
, { html: {x:'x'}, category: 'lowerbody_strengthPrimary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthSecondary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthSecondary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthSecondary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthSecondary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthSecondary', freq: 1 }
, { html: {x:'x'}, category: 'lowerbody_strengthSecondary', freq: 1 }
, { html: {x:'x'}, category: 'lowerbody_strengthSecondary', freq: 1 }
, { html: {x:'x'}, category: 'upperbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'upperbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'upperbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'upperbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'upperbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'upperbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'upperbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'upperbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'lowerbody_strengthIsolation', freq: 1 }
, { html: {x:'x'}, category: 'lowerbody_strengthIsolation', freq: 1 }
, { html: {x:'x'}, category: 'lowerbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'lowerbody_strengthIsolation', freq: 2 }
, { html: {x:'x'}, category: 'mobility', freq: 2 }
, { html: {x:'x'}, category: 'mobility', freq: 2 }
, { html: {x:'x'}, category: 'mobility', freq: 2 }
, { html: {x:'x'}, category: 'mobility', freq: 2 }
];
const max = {
prehab: 2,
skillTechnique: 2,
upperbody_strengthPrimary: 2,
lowerbody_strengthPrimary: 2,
upperbody_strengthSecondary: 2,
lowerbody_strengthSecondary: 2,
upperbody_strengthIsolation: 2,
lowerbody_strengthIsolation: 2,
mobility: 1
};
const smallerArrays = fullRoutine.reduce((acc,elm)=>
{
let Nbr = (acc.filter(element=>( element.category===elm.category))).length
if (Nbr < max[elm.category] ) { acc.push(elm) }
return acc
}, [] )
// show result :
for (let idx in smallerArrays )
{
console.log( idx , '=>', JSON.stringify( smallerArrays[idx] ) );
}
好的,这是我倒多杯水的第二个答案。
请注意,这里有空数组,因为没有更多的水可以倒了。您可以轻松过滤掉它们。
var fullRoutine = [{
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "prehab",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "skillTechnique",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "upperbody_strengthPrimary",
}, {
category: "lowerbody_strengthPrimary",
}, {
category: "lowerbody_strengthPrimary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "upperbody_strengthSecondary",
}, {
category: "lowerbody_strengthSecondary",
}, {
category: "lowerbody_strengthSecondary",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "upperbody_strengthIsolation",
}, {
category: "lowerbody_strengthIsolation",
}, {
category: "lowerbody_strengthIsolation",
}, {
category: "lowerbody_strengthIsolation",
}, {
category: "lowerbody_strengthIsolation",
}, {
category: "mobility",
}, {
category: "mobility",
}, {
category: "mobility",
}, {
category: "mobility",
}];
const max = {
prehab: 2,
skillTechnique: 2,
upperbody_strengthPrimary: 2,
lowerbody_strengthPrimary: 2,
upperbody_strengthSecondary: 2,
lowerbody_strengthSecondary: 2,
upperbody_strengthIsolation: 2,
lowerbody_strengthIsolation: 2,
mobility: 1
};
var newarrs = [];
var i = 0;
while (fullRoutine.length) { //if the bottle still has water
newarrs.push([]); //get a new cup
Object.entries(max).forEach(e => { //pour different waters
newarrs[i].push(//add water to cup
fullRoutine.filter(o => o.category === e[0])
.slice(0,e[1])
);
fullRoutine = //remove water from bottle
fullRoutine.filter(o => o.category === e[0])
.slice(e[1])
.concat(fullRoutine
.filter(o => o.category !== e[0]));
});
i++; //get ready for another cup
}
console.log(newarrs);
基本上,倒水后,瓶子会像预期的那样失去一些水。