以下のような理由から、質問の回答に至るアルゴリズムは質問者様以外には実装不能だと思います。
- result の
'31-40': 1,
は obj 40 : 3,
の 3 を 1 と評価しており、変換根拠が分からない(obj の 10,50,60,90,100 が一貫して 1/3 と評価されたり 12,50,90 にも出現する値 3 が一貫して 1 に評価されたりしているようには伺えないため、40 と 3 の組み合わせで 1 になる特殊ルールがあると想定される)
- result の
'81-90': 3,
は obj 89: 2, 90: 3,
の合計としては合わず、3 にも出現する値 2 が一貫して無視されたり、 10,40,50,60,100 が一貫して 1/3 と評価されたりしているようには伺えないため、89: 2, 90: 3,
を 3 とする特殊ルールがあると想定される)
- result の
'100-': 1,
は obj 100: 9, 101: 1
の合計としては合わず、100: 9, 101: 1
を 1 とする特殊ルールがあると想定される)
参考として、結果が異なってしまうが「オブジェクトのキーの範囲でValueを合計したい」は下記のように実装できる。
javascript
1const obj = {
2 1: 1,
3 3: 2,
4 10: 1,
5 12: 3,
6 20: 4,
7 30: 1,
8 40 : 3,
9 45 : 8,
10 50: 3,
11 60: 8,
12 73: 6,
13 89: 2,
14 90: 3,
15 100: 9,
16 101: 1
17}
18const buildJudger = (s) => {
19 const opt = s.split("-");
20 if(opt.length !== 2 || (opt[0] === "" && opt[1] === "")) return () => false;
21 const [first, second] = opt.map(Number);
22 if(opt[0] === "") return (a) => a <= second;
23 if(opt[1] === "") return (a) => first <= a;
24 return (a) => first <= a && a <= second;
25}
26const pivots = ['1-10', '11-20', '21-30', '31-40', '41-50', '51-60', '61-70', '71-80', '81-90', '91-100', '100-',];
27const result = pivots.reduce((a,c)=>{
28 const f = buildJudger(c);
29 const sum = Object.entries(obj).reduce((a,c)=> f(Number(c[0])) ? a+c[1] : a ,0);
30 return {...a,[c]:sum};
31},{});
このとき result は↓こうなります。
javascript
1{
2"1-10": 4,
3"11-20": 7,
4"21-30": 1,
5"31-40": 3,
6"41-50": 11,
7"51-60": 8,
8"61-70": 0,
9"71-80": 6,
10"81-90": 5,
11"91-100": 9,
12"100-": 10,
13}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/29 12:36