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

时间:2018-03-02 10:19:17

标签: javascript arrays sorting

我是这个阵列:

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/

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

6 个答案:

答案 0 :(得分: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 :(得分: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);

答案 2 :(得分:1)

a已经是数组的而非其索引所以此行错误

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

而不仅仅是

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

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

答案 3 :(得分:1)

你有问题......

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

&#13;
&#13;
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);
&#13;
&#13;
&#13;

你可以在你的代码上做一些奇特的事情,使它看起来很好......比如..

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

答案 4 :(得分:1)

&#13;
&#13;
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)
&#13;
&#13;
&#13;

答案 5 :(得分: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);

相关问题