如何在多个数组中比较相同的值?

问题描述

我正在一个涉及嵌套数组的项目中,我需要按大小对每个数组中的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)))])));