问题描述
我正在一个涉及嵌套数组的项目中,我需要按大小对每个数组中的1个值进行排序。 (所有数组都采用相同的格式,例如[a,b,c,d])。
更清楚地说,我如何从time[60][x]
这样的数组中选择较大的数字,其中x是数组的数目(这是一个非常奇怪的嵌套)。
const time = {
15: [
{ language: 'english',raw: 105.6,acc: 93.94,wpm: 96,punctuation: false }
],30: [
{ language: 'english',raw: 66.4,wpm: 66.4,punctuation: false,difficulty: 'normal' }
],60: [
{ acc: 98.97,language: 'english',puncutation: false,difficulty: 'normal' },{ acc: 92.63,language: 'english_10k',wpm: 59.19,raw: 60.99 }
]
};
如您所见,每个数组嵌套有不同数量的数组,例如time[60][2]
包含2个数组。
这是对象的结构。我需要从wpm列中找到每个数组的最大值。
任何帮助都将不胜感激,
谢谢
解决方法
如果我正确理解了您的问题,则可能是您需要的:
const time = {
15: [{wpm: 10},{wpm: 15},{wpm: 20}],30: [{wpm: 5},{wpm: 10},{wpm: 30},],60: [{wpm: 4},{wpm: 12},{wpm: 8},]
};
const results = {};
// iterate over the time object
for (let key in time) {
results[key] = time[key].reduce((acc,item) => {
if (item.wpm > acc) {
return item.wpm;
}
return acc;
},0);
}
console.log(results);
这是一个codepen:https://codepen.io/geuis/pen/VwaxWWY
,Object
.fromEntries(Object
.entries(time)
.map(([key,array]) => ([key,Math.max(...array.map(({ wpm }) => wpm))])));
实时示例:
const time = {
15: [
{ language: 'english',raw: 105.6,acc: 93.94,wpm: 96,puncutation: false }
],30: [
{ language: 'english',raw: 66.4,wpm: 66.4,punctuation: false,difficulty: 'normal' }
],60: [
{ acc: 98.97,language: 'english',puncutation: false,difficulty: 'normal' },{ acc: 92.63,language: 'english_10k',wpm: 59.19,raw: 60.99 }
]
};
const maxes = Object
.fromEntries(Object
.entries(time)
.map(([key,Math.max(...array.map(({ wpm }) => wpm))])));
console.log(maxes);
要保留整个对象,以便随后可以访问其除wpm
之外的其他属性:
Object.fromEntries(Object.entries(time).map(([key,arr]) => ([key,arr.find(({ wpm }) => wpm == Math.max(...arr.map(({ wpm }) => wpm)))])));