首页 > 解决方案 > 按数组中的标签对不同的字段进行排序

问题描述

我从后端得到一组混乱的数据。REF 和 LOT 标签可以在不同的索引中,我需要它们在前端始终为 1 和 2(REF 和 LOT)。如何检查标签和排序?

版本 1:

array1 = [
    { label: 'GT', placeholder: null, value: '001111' },
    { label: 'Date', placeholder: null, value: '01/01/2000' },
    { label: 'LOT', placeholder: null, value: '84739' },
    { label: 'REF', placeholder: null, value: '11111' },
    { label: 'Company', placeholder: null, value: 'Company' },
  ];

版本 2:

array2 = [
    { label: 'GT', placeholder: null, value: '001111' },
    { label: 'LOT', placeholder: null, value: '84739' },
    { label: 'Date', placeholder: null, value: '01/01/2000' },
    { label: 'Company', placeholder: null, value: 'Company' },
    { label: 'REF', placeholder: null, value: '11111' },
  ];

结果:

[
    { label: 'REF', placeholder: null, value: '11111' },
    { label: 'LOT', placeholder: null, value: '84739' },
    { label: 'GT', placeholder: null, value: '001111' },
    { label: 'Date', placeholder: null, value: '01/01/2000' },
    { label: 'Company', placeholder: null, value: 'Company' },
];

标签: javascriptreactjs

解决方案


您可以获取一个有序对象,并通过分配一个较大的值将它们移到末尾。

const array = [ { label: 'GT', placeholder: null, value: '001111' }, { label: 'LOT', placeholder: null, value: '84739' }, { label: 'Date', placeholder: null, value: '01/01/2000' }, { label: 'Company', placeholder: null, value: 'Company' }, { label: 'REF', placeholder: null, value: '11111' }, ],
    sortOrder = ['REF', 'LOT'],
    order = Object.fromEntries(sortOrder.map((k, i) => [k, i + 1]));
    
array.sort((a, b) => (order[a.label] || Number.MAX_VALUE) - (order[b.label] || Number.MAX_VALUE) );

console.log(array);


推荐阅读