Javascript 如何对混合文本和数字的数据进行排序?

Javascript 如何对混合文本和数字的数据进行排序?,javascript,reactjs,lodash,Javascript,Reactjs,Lodash,我有一个数据,它将显示为表,并使用orderBy(lodash)对数据进行排序,但它没有按我所希望的那样工作 现在,我的代码是 const data=orderBy(realData、['name']、['asc']) 这是我的数据 输入: [{name:'A1'},{name:'A2'},{name:'A21'},{name:'B10'},{name:'A100'},{name:'A22'},{name:'B32'},{name:'A3'}] 问题是“orderBy”将数据按文本排序(ASCI

我有一个数据,它将显示为表,并使用orderBy(lodash)对数据进行排序,但它没有按我所希望的那样工作

现在,我的代码是
const data=orderBy(realData、['name']、['asc'])

这是我的数据 输入:
[{name:'A1'},{name:'A2'},{name:'A21'},{name:'B10'},{name:'A100'},{name:'A22'},{name:'B32'},{name:'A3'}]

问题是“orderBy”将数据按文本排序(ASCII排序) 电流输出:
[{name:'A1'},{name:'A100'},{name:'A2'},{name:'A21'},{name:'A22'},{name:'A3'},{name:'B10'},{name:'B32'}]

但是我希望数据输出像这样

[{name:'A1'},{name:'A2'},{name:'A3'},{name:'A21'},{name:'A22'},{name:'A100'},{name:'B10'},{name:'B32'}]

如果有人有任何建议,请帮忙

谢谢。

排序数组时,可以使用
string#localeCompare
回调。要对数组进行数字排序,请使用
numeric
属性

let data=[{name:'A1'},{name:'A100'},{name:'A2'},{name:'A21'},{name:'A22'},{name:'A3'},{name:'B10'},{name:'B32'}];
data.sort((a,b)=>a.name.localeCompare(b.name,未定义,{numeric:true}));
控制台日志(数据)
作为控制台包装{max height:100%!important;top:0;}
您可以在对数组排序时使用
string\localeCompare
回调。要对数组进行数字排序,请使用
numeric
属性

let data=[{name:'A1'},{name:'A100'},{name:'A2'},{name:'A21'},{name:'A22'},{name:'A3'},{name:'B10'},{name:'B32'}];
data.sort((a,b)=>a.name.localeCompare(b.name,未定义,{numeric:true}));
控制台日志(数据)

.as控制台包装{max height:100%!important;top:0;}
一种简单易懂的方法如下:

data.sort((a, b) => {
  const listA = a.name.trim().split('');
  const listB = b.name.trim().split('');

  const categoryA = listA.splice(0, 1);
  const categoryB = listB.splice(0, 1);

  const numberA = listA.join('');
  const numberB = listB.join('');

  if (categoryA > categoryB) return 1;
  if (categoryA < categoryB) return -1;

  return numberA - numberB;
});
data.sort((a,b)=>{
const listA=a.name.trim().split(“”);
const listB=b.name.trim().split(“”);
常数类别=列表拼接(0,1);
常量类别b=列表b.拼接(0,1);
常量numberA=listA.join(“”);
常量numberB=listB.join(“”);
如果(categoryA>categoryB)返回1;
if(categoryA
一种简单易懂的方法如下:

data.sort((a, b) => {
  const listA = a.name.trim().split('');
  const listB = b.name.trim().split('');

  const categoryA = listA.splice(0, 1);
  const categoryB = listB.splice(0, 1);

  const numberA = listA.join('');
  const numberB = listB.join('');

  if (categoryA > categoryB) return 1;
  if (categoryA < categoryB) return -1;

  return numberA - numberB;
});
data.sort((a,b)=>{
const listA=a.name.trim().split(“”);
const listB=b.name.trim().split(“”);
常数类别=列表拼接(0,1);
常量类别b=列表b.拼接(0,1);
常量numberA=listA.join(“”);
常量numberB=listB.join(“”);
如果(categoryA>categoryB)返回1;
if(categoryA
您可能要签出:的可能重复您可能要签出:的可能重复