javascript - 按相等的两个键对对象数组进行排序
问题描述
我正在尝试通过两个键对对象数组进行排序,其中第一个按升序排序,第二个按相等排序。我尝试的是,仅按第一个属性对数组进行排序:
var test_array = [{number: 1, color: "#EEEE23"},
{number: 4, color: "#FFFFFF"},
{number: 5, color: "#EEEE23"},
{number: 1, color: "#FFFFFF"},
{number: 6, color: "#CCCC23"},
{number: 1, color: "#EEEE23"},
{number: 2, color: "#EEEE23"},
{number: 3, color: "#FFFFFF"},
{number: 1, color: "#FFFFFF"},
{number: 2, color: "#FFFFFF"},
{number: 3, color: "#EEEE23"},
{number: 2, color: "#EEEE23"},
{number: 3, color: "#FFFFFF"},
{number: 2, color: "#FFFFFF"}]
test_array.sort(function(x,y){
return x.number - y.number || x.color === y.color
我的目标是让数组看起来像这样,其中颜色也被排序:
var test_array = [{number: 1, color: "#EEEE23"},
{number: 1, color: "#EEEE23"},
{number: 1, color: "#FFFFFF"},
{number: 1, color: "#FFFFFF"},
{number: 2, color: "#EEEE23"},
{number: 2, color: "#EEEE23"},
{number: 2, color: "#FFFFFF"},
{number: 2, color: "#FFFFFF"},
{number: 3, color: "#EEEE23"},
{number: 3, color: "#FFFFFF"},
{number: 3, color: "#FFFFFF"},
{number: 4, color: "#FFFFFF"},
{number: 5, color: "#EEEE23"},
{number: 6, color: "#CCCC23"}]
我的解决方案是否过于幼稚,并且使用相等性进行排序并不那么容易?
解决方案
使用相等比较没有意义,因为sort()
函数期望返回值是一个数字;相等比较返回true
或false
。相反,您可以使用 String.localeCompare()
方法:
return x.number - y.number || x.color.localeCompare(y.color);
该.localeCompare()
函数完全符合您的要求,根据字符串的字典顺序返回 -1、0 或 1。
推荐阅读
- jquery - jQuery帮助按钮导致调用页面动作
- azure-cognitive-search - 基于搜索列的 Azure 搜索排名
- jquery - 动态 DOM:如何在添加/删除动态元素以及在 DOM 中向上/向下移动元素时增加/减少 ID/名称?
- reactjs - 变量作为插值字符串
- javafx - 将 JavaFX 标签绑定到 StringProperty
- scapy - 如何使用 scapy 实现 stp、rstp、mstp 协议?
- python - 您可以一次激活多个 Python 虚拟环境吗?
- android - 尝试从内部存储中读取文件时,图库会立即打开和关闭
- php - PrestaShop 1.7.3 Product.php 类覆盖
- android - Ionic Cordova PhotoGallery SaveImage 无法获得许可