首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在浏览器版本对数组中找到最小版本号?

如何在浏览器版本对数组中找到最小版本号?
EN

Stack Overflow用户
提问于 2019-05-04 04:24:21
回答 2查看 101关注 0票数 0

我正在寻找从数组返回特定项的替代解决方案。

代码语言:javascript
复制
[
  ["chrome", "72"],
  ["chrome", "71"],
  ["chrome", "70"],
  ["edge", "18"],
  ["edge", "17"]
]

如何返回每个浏览器的最老版本,例如[ [ "chrome", "70" ], [ "edge", "17" ] ]

我现在有一个chrome过滤器和一个edge过滤器等等,但是我不知道是否有一种更干净的方法来实现同样的结果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-04 04:33:09

您可以使用reducemin

代码语言:javascript
复制
const data = 
  [ ["chrome", "72"]
  , ["chrome", "71"]
  , ["chrome", "70"]
  , ["edge", "18"]
  , ["edge", "17"]
  ]

const result = 
  data.reduce
    ( (acc, [ browser, version ]) =>
        ({ ...acc, [browser]: Math.min(version, acc[browser] || Infinity) })
    , {}
    )
    
console.log(result)
// { "chrome": 70
// , "edge": 17
// }

console.log(Object.entries(result))
// [ [ "chrome", 70 ]
// , [ "edge", 17 ]
// ]

如果你想要最新版本,用max代替-

代码语言:javascript
复制
const result = 
  data.reduce
    ( (acc, [ browser, version ]) =>
        ({ ...acc, [browser]: Math.max(version, acc[browser] || 0) })
    , {}
    )
票数 2
EN

Stack Overflow用户

发布于 2019-05-04 04:40:47

您需要将这个数组reduce到一个对象中,其中每个键都是浏览器的名称,而值是最老的版本。一个简单的if语句检查哪个版本是旧版本就足够了。使用[browser, version]使事情变得更简单:

代码语言:javascript
复制
const browsers = [
  ["chrome", "72"],
  ["chrome", "71"],
  ["chrome", "70"],
  ["edge", "18"],
  ["edge", "17"]
];

browsers.reduce((oldest, [browser, version]) => {
  if(!oldest.hasOwnProperty(browser) || Number(oldest[browser]) > Number(version)){
    oldest[browser] = version;
  }

  return oldest;
}, {});

此时,您将得到这样的结构:{chrome: "70", edge: "17"}。可以将其传递给Object.entries或其聚脂填充以创建所需的数组:

代码语言:javascript
复制
Object.entries({chrome: "70", edge: "17"});
// => [ [ "chrome", "70" ], [ "edge", "17" ] ]

评论中,您已经提到输入数组总是从最高到最低排序。在这种情况下,您可以使用Object.fromEntries或其多边形填充,并在一行中实现您的结果:

代码语言:javascript
复制
Object.entries(Object.fromEntries(browsers));
// => [ [ "chrome", "70" ], [ "edge", "17" ] ]

fromEntries从上到下遍历输入数组,并将每个键值对分配给对象。带有重复键的条目将被覆盖,并且由于所需的版本位于底部,这正是您想要的。

如果所需的条目位于底部,则可以使用类似于Object.entries(Object.fromEntries(browsers.reverse()))的内容。否则,这一行将提供最新版本。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55979426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档