简体   繁体   English

以人工顺序对 JavaScript 数组进行排序

[英]Sort JavaScript Array in Artificial Order

I have an array returned by a REST query that represents the number of items in a multi-step production process.我有一个由REST查询返回的数组,它表示多步骤生产过程中的项目数。

var steps = [
  { name:'Package', value:3},
  { name:'Assemble', value:1 },
  { name:'Ship', value:7},
  { name:'Preprocess', value:9 },
  { name:'Paint', value:5 }
];

I'd like to sort them in the order of the process, like this:我想按照过程的顺序对它们进行排序,如下所示:

  1. Preprocess预处理
  2. Paint
  3. Assemble集合
  4. Package包裹
  5. Ship

I have other alphanumeric sorts that I am doing with Underscore but I cannot figure this one out.我有其他的字母数字排序,我正在用 Underscore 做,但我无法弄清楚这一点。

You could take an object for the wanted order with numerical values for the position.您可以为想要的订单获取一个带有位置数值的对象。 Then sort by this values.然后按此值排序。

 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; }

You can create an object which mentions the priority on each name while ordering.您可以创建一个对象,在订购时提及每个名称的优先级。

 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);

I'm just using a precedence map for every step type so that I can use it in the compare function.我只是为每个步骤类型使用优先级映射,以便我可以在比较函数中使用它。

 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) }));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM