当前位置: 代码迷 >> JavaScript >> 排序数组而不改变某些特定项目的顺序
  详细解决方案

排序数组而不改变某些特定项目的顺序

热度:19   发布时间:2023-06-12 13:57:19.0

我想对这个数组进行排序,就像顶部的所有四年最后到来一样,而不改变其他人的顺序,并且应该在不使用正则表达式的情况下完成。 注意,在这种情况下年数不是固定的,可能在其他迭代年数仅为 2。

我试图对它进行排序并反转它的工作,但这改变了其他人的顺序。

[ '2019',
  '2020',
  '2021',
  '2022',
  '2023',
  '_id',
  'Tender Ref Number',
  'Tender Number',
  'Additional Information',
  'Tender Type',
  'Country Exchange Rate',
  'Start Date',
  'End Date',
  'Submission Closing Date',
  'Result Date',
  'Country',
  'Region',
  'Distributer Name',
  'Franchise Name',
  'Account Name',
  'Local Account Name',
  'Win/Lost',
  'SAP Material Code',
  'ICC Code',
  'Quantity',
  'Description',
  'Standard Cost Per SAP Unit',
  'Tender Price Local',
  'Tender Price USD',
  'Total Sales',
  'Tender Currency',
  'quantity_distribution',
  'Approvers' ]

[ '_id',
  'Tender Ref Number',
  'Tender Number',
  'Additional Information',
  'Tender Type',
  'Country Exchange Rate',
  'Start Date',
  'End Date',
  'Submission Closing Date',
  'Result Date',
  'Country',
  'Region',
  'Distributer Name',
  'Franchise Name',
  'Account Name',
  'Local Account Name',
  'Win/Lost',
  'SAP Material Code',
  'ICC Code',
  'Quantity',
  'Description',
  'Standard Cost Per SAP Unit',
  'Tender Price Local',
  'Tender Price USD',
  'Total Sales',
  'Tender Currency',
  'quantity_distribution',
  'Approvers',
  '2019',
  '2020',
  '2021',
  '2022',
  '2023',]

尝试使用和来检查元素是否是年份(数字)和...展开运算符:

 var data = [ '2019', '2020', '2021', '2022', '2023', '_id', 'Tender Ref Number', 'Tender Number', 'Additional Information', 'Tender Type', 'Country Exchange Rate', 'Start Date', 'End Date', 'Submission Closing Date', 'Result Date', 'Country', 'Region', 'Distributer Name', 'Franchise Name', 'Account Name', 'Local Account Name', 'Win/Lost', 'SAP Material Code', 'ICC Code', 'Quantity', 'Description', 'Standard Cost Per SAP Unit', 'Tender Price Local', 'Tender Price USD', 'Total Sales', 'Tender Currency', 'quantity_distribution', 'Approvers' ]; let years = data.splice(0, data.filter((ele) => !isNaN(ele)).length); data = [...data, ...years]; console.log(data);

假设在n 年之后,下一项将是数组中的_id 您可以的阵列,直到_id和它在末端。

 let arr = [ '2019', '2020', '2021', '2022', '2023', '_id', 'Tender Ref Number', 'Tender Number', 'Additional Information', 'Tender Type', 'Country Exchange Rate', 'Start Date', 'End Date', 'Submission Closing Date', 'Result Date', 'Country', 'Region', 'Distributer Name', 'Franchise Name', 'Account Name', 'Local Account Name', 'Win/Lost', 'SAP Material Code', 'ICC Code', 'Quantity', 'Description', 'Standard Cost Per SAP Unit', 'Tender Price Local', 'Tender Price USD', 'Total Sales', 'Tender Currency', 'quantity_distribution', 'Approvers' ]; arr = arr.concat(arr.splice(0, arr.indexOf('_id'))); console.log(arr);

let a = [ '2019',
  '2020',
  '2021',
  '2022',
  '2023',
  '_id',
  'Tender Ref Number',
  'Tender Number',
  'Additional Information',
  'Tender Type',
  'Country Exchange Rate',
  'Start Date',
  'End Date',
  'Submission Closing Date',
  'Result Date',
  'Country',
  'Region',
  'Distributer Name',
  'Franchise Name',
  'Account Name',
  'Local Account Name',
  'Win/Lost',
  'SAP Material Code',
  'ICC Code',
  'Quantity',
  'Description',
  'Standard Cost Per SAP Unit',
  'Tender Price Local',
  'Tender Price USD',
  'Total Sales',
  'Tender Currency',
  'quantity_distribution',
  'Approvers' ];
let years = a.filter(elem => !isNaN(Number(elem));
years = years.sort((a,b) => a-b);
let finalArr = a.filter(elem => isNaN(Number(elem));
finalArr.concat(years);

如果年份可以在数组的任何位置,那么您可以这样使用 :

 const input = [ '2019', '2020', '2021', '2022', '2023', '_id', 'Tender Ref Number', 'Tender Number', 'Additional Information', 'Tender Type', 'Country Exchange Rate', 'Start Date', '2024', 'End Date', 'Submission Closing Date', 'Result Date', 'Country', 'Region', 'Distributer Name', 'Franchise Name', 'Account Name', 'Local Account Name', 'Win/Lost', 'SAP Material Code', 'ICC Code', 'Quantity', 'Description', 'Standard Cost Per SAP Unit', 'Tender Price Local', '2025', 'Tender Price USD', 'Total Sales', 'Tender Currency', 'quantity_distribution', 'Approvers']; let res = input.reduce( (acc, curr) => (isNaN(curr) ? acc[0].push(curr) : acc[1].push(curr), acc), [[],[]] ); console.log(res[0].concat(res[1]));

  相关解决方案