javascript - 如何按值排序和排列?例如前 4 比 2 比 16
问题描述
我试过这个已知的
test.sort(function (a, b) {
var textA = a[0].Val1;
var textB = b[0].Val1;
if (textA > textB)
return -1;
if (textA < textB)
return 1;
return 0;
});
但我想看到这样的排序数组
{name: 'John', Val1: 4, hireDate: "July 1, 2010"},
{name: 'XXX', Val1: 4, hireDate: "August 15, 2009"},
{name: 'YYY', Val1: 2, hireDate: "August 15, 2009"},
{name: 'ZZZ', Val1: 2, hireDate: "August 15, 2009"},
{name: 'ZZZ', Val1: 16, hireDate: "August 15, 2009"},
{name: 'ZZZ', Val1: 16, hireDate: "August 15, 2009"},
{name: 'Ana', Val1: 1, hireDate: "December 12, 2011"}
解决方案
您可以在单独的scores
列表中定义顺序,并按.indexOf
如下方式使用:
const test = [
{name: 'John', Val1: 4, hireDate: "July 1, 2010"},
{name: 'XXX', Val1: 4, hireDate: "August 15, 2009"},
{name: 'YYY', Val1: 2, hireDate: "August 15, 2009"},
{name: 'ZZZ', Val1: 2, hireDate: "August 15, 2009"},
{name: 'ZZZ', Val1: 16, hireDate: "August 15, 2009"},
{name: 'ZZZ', Val1: 16, hireDate: "August 15, 2009"},
{name: 'Ana', Val1: 1, hireDate: "December 12, 2011"}
];
const scores = [4,2,16];
const MAX = scores.length;
const sorted = test.sort((a, b) => {
let indexOfA = scores.indexOf(a.Val1);
indexOfA = (indexOfA >= 0) ? indexOfA : MAX;
let indexOfB = scores.indexOf(b.Val1);
indexOfB = (indexOfB >= 0) ? indexOfB : MAX;
return indexOfA - indexOfB;
});
console.log(sorted);
推荐阅读
- reactjs - 在 redux 状态更改后,React 导航不会更改导航屏幕
- java - 在 AWS 中标记 Step Function 任务
- python - 获取搜索页面结果,使用 jwt 身份验证登录(python)
- vue.js - 如何使用 Vuetify CSS 间距助手?
- drools - JBPM6 添加自定义节点
- regex - 如何创建过滤器来搜索具有特殊字符的单词,同时在没有特殊字符的输入中写入
- javascript - Splide Slider - 制作响应式滑块
- python - 如何将缩放时的matplotlib颜色条范围更改为缩放区域中数据的限制
- python - 用 Python 编写 Discord 机器人 - 为什么它无法设置嵌入图像?
- python - 在虚拟环境中安装 ipykernel 并运行 jupyter notebook - 不使用 conda