如何按值排序和排列?例如前 4 比 2 比 16
How Can I sort and array by values? e.g first 4's than 2's than 16's
我试过这个是已知的
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);
您可以通过创建一个排序对象来完成。
const data = [
{ 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 order = { 4: 1, 2: 2, 16: 3 };
data.sort(
(x, y) =>
(order[x.Val1] || Number.MAX_VALUE) - (order[y.Val1] || Number.MAX_VALUE)
);
console.log(data);
我试过这个是已知的
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);
您可以通过创建一个排序对象来完成。
const data = [
{ 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 order = { 4: 1, 2: 2, 16: 3 };
data.sort(
(x, y) =>
(order[x.Val1] || Number.MAX_VALUE) - (order[y.Val1] || Number.MAX_VALUE)
);
console.log(data);