首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从对象值替换数组的类似项

从对象值替换数组的类似项
EN

Stack Overflow用户
提问于 2022-11-09 17:33:49
回答 2查看 30关注 0票数 0

下面有一个名为板球狂热的物体,由不同国家的净跑和得分组成。我试图在JS中编写一段代码,首先根据球队的分数对他们进行排序,如果他们有相同的分数,使用网跑作为平局者。在我们的例子中,孟加拉国和尼泊尔得分相同,因此我们将考虑这两个国家的净运行情况,即孟加拉国的1.176和尼泊尔的-0.849。由于尼泊尔有最高的净运量,我们将首先安排尼泊尔的净跑。我已经对这些点进行了排序,但我无法弄清楚如何用净运行来替换类似的点。我需要下面的数组登录到控制台'3‘、'4’、'5‘、'6’、'-0.849‘、'-1.176’.I肯定会感谢这个社区的人们花时间来解决我被塞进去这个小小的疑问,并且非常乐意有人在这个学习过程中帮助我:)

这是我的代码链接

代码语言:javascript
运行
复制
    const cricketMania = {
    India: {
        netRuns: "1.319",
        points: "8"
    },
    Pakistan: {
        netRuns: "1.028",
        points: "6"
    },
    Saudi: {
        netRuns: "0.874",
        points: "5"
    },
    Nepal: {
        netRuns: "-0.849",
        points: "4"
    },
    Bangladesh: {
        netRuns: "-1.176",
        points: "4"
    },
    Zimbabwe: {
        netRuns: "-1.138",
        points: "3"
    }
};

var point = []; // [ '8', '6', '5', '8', '4', '3' ]
for (let m in cricketMania) {
    point.push(cricketMania[m]["points"]);
}

var sortedpoints = point.sort((a, b) => a - b);
document.write(sortedpoints); //[ '3', '4', '5', '6', '8', '8' ]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-09 18:02:14

这不是最短的解决办法,但它可能会给出要点。

  1. 我们将对象转换为包含国家名称和其他值的数组。
  2. 然后我们按点排序数组,然后按netRuns排序(如果点相等的话)。

排序也可以缩短为结构,如

代码语言:javascript
运行
复制
asArray.sort((a, b) => (a.points * 100 + a.netRuns) - (b.points * 100 + b.netRuns));

我们用来乘的常数应该大于最大b.netRuns的模。

代码语言:javascript
运行
复制
const cricketMania = {
    India: {
        netRuns: "1.319",
        points: "8"
    },
    Pakistan: {
        netRuns: "1.028",
        points: "6"
    },
    Saudi: {
        netRuns: "0.874",
        points: "5"
    },
    Nepal: {
        netRuns: "-0.849",
        points: "4"
    },
    Bangladesh: {
        netRuns: "-1.176",
        points: "4"
    },
    Zimbabwe: {
        netRuns: "-1.138",
        points: "3"
    }
};

const asArray = Object.entries(cricketMania).map(([key, val]) => ({
    name: key,
    netRuns: +val.netRuns,
    points: +val.points
}));

asArray.sort((a, b) => a.points > b.points ? 1 :
                a.points < b.points ? -1 :
                a.netRuns > b.netRuns ? 1 : 
                a.netRuns < b.netRuns ? -1 : 0);
console.log(asArray);

票数 1
EN

Stack Overflow用户

发布于 2022-11-10 07:53:53

您可以通过3个JS函数、Object.values()Array.map()和具有比较函数的Array.sort()来简单地实现这一需求。

现场演示

代码语言:javascript
运行
复制
const cricketMania = {
  India: {
    netRuns: "1.319",
    points: "8"
  },
  Pakistan: {
    netRuns: "1.028",
    points: "6"
  },
  Saudi: {
    netRuns: "0.874",
    points: "5"
  },
  Nepal: {
    netRuns: "-0.849",
    points: "4"
  },
  Bangladesh: {
    netRuns: "-1.176",
    points: "4"
  },
  Zimbabwe: {
    netRuns: "-1.138",
    points: "3"
  }
};

const res = Object.values(cricketMania).map(({ points }) => points).sort((a, b) => a - b);

console.log(res);

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

https://stackoverflow.com/questions/74379088

复制
相关文章

相似问题

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