You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从对象数组提取views值为单数组并获取前两大值

问题解决:提取对象数组的views并获取最大两个值

原代码问题分析

你当前的代码里,map回调函数每次都会新建一个空数组myArr,然后只把当前元素的views推进去,再取这个单元素数组的最大值,所以每次输出的都是单个views值,根本没法生成合并后的目标数组。

正确实现步骤

  1. 提取views数组:用map直接返回每个元素的views,就能得到你要的[5678, 2500, 3500, 1250]。
  2. 获取最大的两个值:有两种常用方式:
    • 方式一:先对数组降序排序,再取前两个元素(简单直观)
    • 方式二:遍历数组一次,记录最大和第二大的值(性能更优,适合大数据量)

代码实现

方式一:排序法

const data = [
  { id: 1, views: 5678, textData: "Sun" },
  { id: 2, views: 2500, textData: "Moon" },
  { id: 3, views: 3500, textData: "Earth" },
  { id: 4, views: 1250, textData: "Sky" }
];

// 提取views数组
const viewsArr = data.map(item => item.views);
// 降序排序后取前两个
const topTwo = viewsArr.sort((a, b) => b - a).slice(0, 2);

console.log(viewsArr); // 输出 [5678, 2500, 3500, 1250]
console.log(topTwo); // 输出 [5678, 3500]

方式二:遍历找最值法

const data = [
  { id: 1, views: 5678, textData: "Sun" },
  { id: 2, views: 2500, textData: "Moon" },
  { id: 3, views: 3500, textData: "Earth" },
  { id: 4, views: 1250, textData: "Sky" }
];

const viewsArr = data.map(item => item.views);

let firstMax = -Infinity;
let secondMax = -Infinity;

for (const num of viewsArr) {
  if (num > firstMax) {
    secondMax = firstMax;
    firstMax = num;
  } else if (num > secondMax && num !== firstMax) {
    secondMax = num;
  }
}

const topTwo = [firstMax, secondMax];

console.log(viewsArr); // 输出 [5678, 2500, 3500, 1250]
console.log(topTwo); // 输出 [5678, 3500]

内容的提问来源于stack exchange,提问作者soccerway

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 02:02:21