如何根据数组的字符串元素的第一个字符在Javascript中排序数组? - javascript

问题描述 投票:1回答:6

我是这个数组:

var notifiche_eq= ["10/avdvidv","15/jcbscisb","7/ciudsu"];

我会输出:

["15/jcbscisb","10/avdvidv","7/ciudsu"] 

所以基于每个元素的数字字符。

我试过这段代码但是不起作用:

var notifiche_eq= ["10/avdvidv","15/jcbscisb","7/ciudsu"];

notifiche_eq.sort(function(a, b) {
    var milliA= notifiche_eq[a].split('/');
    var milliB= notifiche_eq[b].split('/');

    milliA= (milliA[0])+0;
    milliB= (milliB[0])+0;

    if(milliB- milliA){
     return b-a;
    }

}); 

alert(notifiche_eq);

这里有jsfiddle:https://jsfiddle.net/13tLjqc0/8/

我希望你能帮助我,对不起我的英语:/

javascript arrays sorting
6个回答
1
投票

你不需要使用notifiche_eq[a]a已经是您的项目。

我优化了你的代码,以便它处理><==

var notifiche_eq= ["10/avdvidv","15/jcbscisb","7/ciudsu"];

notifiche_eq.sort(function(a, b) {
  return (+a.split('/')[0] > +b.split('/')[0] ? -1 : (+a.split('/')[0] < +b.split('/')[0] ? 1 : 0));
}); 

console.log(notifiche_eq);

没有任何三元运算符的版本如评论中所述:

var notifiche_eq= ["10/avdvidv","15/jcbscisb","7/ciudsu"];

notifiche_eq.sort(function(a, b) {
  if(+a.split('/')[0] > +b.split('/')[0]) return -1;
  else if(+a.split('/')[0] < +b.split('/')[0]) return 1;
  else return 0;
}); 

console.log(notifiche_eq);

1
投票

a已经是数组的项目,而不是它的索引,所以这一行是错误的

var milliA= notifiche_eq[a].split('/');

相反,只是简单

  • split数组的项目
  • 获得第一个索引值
  • 使用一元number将其转换为+

notifiche_eq.sort(function(a, b) {
  return +b.split('/')[0] - +a.split('/')[0];
});

1
投票

你遇到的问题......

  • notifiche_eq[a]notifiche_eq[b]应该只是a和b。
  • 只需返回b-a。

var notifiche_eq= ["10/avdvidv","15/jcbscisb","7/ciudsu"];

notifiche_eq = notifiche_eq.sort(function(a, b) {
    var milliA= a.split('/');
    var milliB= b.split('/');

    milliA= +milliA[0];
    milliB= +milliB[0];

    return milliB - milliA;

}); 

console.log(notifiche_eq);

你可以在你的代码上做一些奇特的东西,使它看起来很好......就像..

notifiche_eq.sort((a, b) => +b.split('/')[0] - +a.split('/')[0]);

1
投票

var notifiche_eq = ["10/avdvidv", "15/jcbscisb", "7/ciudsu"];

// es5
notifiche_eq.sort(function (a, b) {
    return b.split('/').shift() - a.split('/').shift()
});
// es6
notifiche_eq.sort((a, b) => b.split('/').shift() - a.split('/').shift());

console.log(notifiche_eq)

1
投票

/拆分,取第一个元素并使用+将其转换为数字

var notifiche_eq= ["10/avdvidv", "15/jcbscisb", "7/ciudsu"];
notifiche_eq.sort((a, b) => +b.split('/')[0] - +a.split('/')[0]);
console.log(notifiche_eq);

1
投票

您可以使用正则表达式来获取字符串的起始数字。

var notifiche_eq = ["10/avdvidv","15/jcbscisb","7/ciudsu"];

notifiche_eq.sort(function (a, b) {
    function getValue(s) { return s.match(/^\d+/)[0]; }
    return getValue(b) - getValue(a);
});

console.log(notifiche_eq);
© www.soinside.com 2019 - 2024. All rights reserved.