按人工顺序对 JavaScript 数组进行排序
Sort JavaScript Array in Artificial Order
我有一个由 REST
查询返回的数组,表示多步骤生产过程中的项目数。
var steps = [
{ name:'Package', value:3},
{ name:'Assemble', value:1 },
{ name:'Ship', value:7},
{ name:'Preprocess', value:9 },
{ name:'Paint', value:5 }
];
我想按照进程的顺序对它们进行排序,像这样:
- 预处理
- 绘画
- Assemble
- 套餐
- 船舶
我正在使用 Underscore 进行其他字母数字排序,但我无法弄清楚这个。
您可以为想要的订单取一个带有位置数值的对象。然后按此值排序。
var steps = [{ name: 'Package', value: 3 }, { name: 'Assemble', value: 1 }, { name: 'Ship', value: 7 }, { name: 'Preprocess', value: 9 }, { name: 'Paint', value: 5 }],
order = { Preprocess: 1, Paint: 2, Assemble: 3, Package: 4, Ship: 5 };
steps.sort(({ name: a }, { name: b }) => order[a] - order[b]);
console.log(steps);
.as-console-wrapper { max-height: 100% !important; top: 0; }
您可以创建一个对象,在订购时提及每个名称的优先级。
let priority = {
Preprocess: 1,
Paint: 2,
Assemble: 3,
Package: 4,
Ship: 5,
}
var steps = [
{ name:'Package', value:3},
{ name:'Assemble', value:1 },
{ name:'Ship', value:7},
{ name:'Preprocess', value:9 },
{ name:'Paint', value:5 }
];
const result = steps.sort((a,b) => priority[a.name] - priority[b.name]);
console.log(result);
我只是为每个步骤类型使用一个优先级映射,以便我可以在比较函数中使用它。
var steps = [
{ name: 'Package', value: 3 },
{ name: 'Assemble', value: 1 },
{ name: 'Ship', value: 7 },
{ name: 'Preprocess', value: 9 },
{ name: 'Paint', value: 5 }
];
var stepPrecedenceMap = new Map([["Preprocess", 1], ["Paint", 2], ["Assemble", 3], ["Package", 4], ["Ship", 5]])
console.log(
steps.sort((stepA, stepB) => {
return stepPrecedenceMap.get(stepA.name) - stepPrecedenceMap.get(stepB.name)
}));
我有一个由 REST
查询返回的数组,表示多步骤生产过程中的项目数。
var steps = [
{ name:'Package', value:3},
{ name:'Assemble', value:1 },
{ name:'Ship', value:7},
{ name:'Preprocess', value:9 },
{ name:'Paint', value:5 }
];
我想按照进程的顺序对它们进行排序,像这样:
- 预处理
- 绘画
- Assemble
- 套餐
- 船舶
我正在使用 Underscore 进行其他字母数字排序,但我无法弄清楚这个。
您可以为想要的订单取一个带有位置数值的对象。然后按此值排序。
var steps = [{ name: 'Package', value: 3 }, { name: 'Assemble', value: 1 }, { name: 'Ship', value: 7 }, { name: 'Preprocess', value: 9 }, { name: 'Paint', value: 5 }],
order = { Preprocess: 1, Paint: 2, Assemble: 3, Package: 4, Ship: 5 };
steps.sort(({ name: a }, { name: b }) => order[a] - order[b]);
console.log(steps);
.as-console-wrapper { max-height: 100% !important; top: 0; }
您可以创建一个对象,在订购时提及每个名称的优先级。
let priority = {
Preprocess: 1,
Paint: 2,
Assemble: 3,
Package: 4,
Ship: 5,
}
var steps = [
{ name:'Package', value:3},
{ name:'Assemble', value:1 },
{ name:'Ship', value:7},
{ name:'Preprocess', value:9 },
{ name:'Paint', value:5 }
];
const result = steps.sort((a,b) => priority[a.name] - priority[b.name]);
console.log(result);
我只是为每个步骤类型使用一个优先级映射,以便我可以在比较函数中使用它。
var steps = [
{ name: 'Package', value: 3 },
{ name: 'Assemble', value: 1 },
{ name: 'Ship', value: 7 },
{ name: 'Preprocess', value: 9 },
{ name: 'Paint', value: 5 }
];
var stepPrecedenceMap = new Map([["Preprocess", 1], ["Paint", 2], ["Assemble", 3], ["Package", 4], ["Ship", 5]])
console.log(
steps.sort((stepA, stepB) => {
return stepPrecedenceMap.get(stepA.name) - stepPrecedenceMap.get(stepB.name)
}));