Javascript 返回在字符串数组中找到的最大数字

Javascript 返回在字符串数组中找到的最大数字,javascript,jquery,Javascript,Jquery,我有一个对象数组。对象有一个名为level的属性,该属性是一个包含数字且格式一致的字符串 我试图找到最高的数字,只返回那个数字,但我似乎被阻止了如何从我当前的代码继续 下面是我当前代码的一部分: 以下是我的JavaScript: var myArray = [ { color: 'blue', level: 'L1' }, { color: 'red', level: 'L1' }, {

我有一个对象数组。对象有一个名为
level
的属性,该属性是一个包含数字且格式一致的字符串

我试图找到最高的数字,只返回那个数字,但我似乎被阻止了如何从我当前的代码继续

下面是我当前代码的一部分:

以下是我的JavaScript:

var myArray = [
    {
        color: 'blue',
        level: 'L1'
    },
    {
        color: 'red',
        level: 'L1'
    },
    {
        color: 'green',
        level: 'L2'
    },
    {
        color: 'yellow',
        level: 'L2'
    },
    {
        color: 'purple',
        level: 'L3'
    }
];

for (var i = 0; i < myArray.length; i++) {
    console.log( myArray[i].level.substring(1,2) );
};
var myArray=[
{
颜色:“蓝色”,
级别:“L1”
},
{
颜色:“红色”,
级别:“L1”
},
{
颜色:“绿色”,
级别:“L2”
},
{
颜色:'黄色',
级别:“L2”
},
{
颜色:'紫色',
级别:“L3”
}
];
对于(var i=0;i
我试图得到的结果是只返回上面示例中的数字“3”。最大的数字可能并不总是在数组中的最后一个对象中,但它的格式总是L#。

试试这个():

var highestNum=0;
对于(变量i=0;i最大值){
highestNum=num;
}
}
console.log(highestNum);

更新:

正如King King在对您的问题的评论中提到的,如果没有其他特殊原因将您的级别设置为这种格式:
L#

您最好只将数字放在那里(以
int
格式,而不是
string

结果是这一行:
var num=parseInt(myArray[i].level.substring(1))
变为此行:
var num=myArray[i]。级别

这就去掉了
substring()
parseInt()
函数,使代码更加有效

小提琴:

试试这个():

var highestNum=0;
对于(变量i=0;i最大值){
highestNum=num;
}
}
console.log(highestNum);

更新:

正如King King在对您的问题的评论中提到的,如果没有其他特殊原因将您的级别设置为这种格式:
L#

您最好只将数字放在那里(以
int
格式,而不是
string

结果是这一行:
var num=parseInt(myArray[i].level.substring(1))
变为此行:
var num=myArray[i]。级别

这就去掉了
substring()
parseInt()
函数,使代码更加有效

小提琴:

另一个选项使用:

另一个选择是:


使用气泡排序(适用于非常小的集合),您可以执行以下操作:

var _sorted = myArray.sort(function(a,b) {
 return b.level.substring(1,2) - a.level.substring(1,2);
});
console.log(_sorted[0]);

现在请注意,这部分解决了您的问题,因为如果您有多个L3,则只会选择第一个。希望这能让您走上正确的道路。

使用气泡排序,这对于非常小的集合是可行的,您可以执行以下操作:

var _sorted = myArray.sort(function(a,b) {
 return b.level.substring(1,2) - a.level.substring(1,2);
});
console.log(_sorted[0]);
function sortDSC(a,b) {
  if (a.level < b.level)
     return 1;
  if (a.level > b.level)
    return -1;
  return 0;
}    
myArray.sort(sortDSC);   
var maxL = myArray[0].level.substring(1, myArray[0].level.length);
console.log(maxL);//3
现在请注意,这部分解决了您的问题,因为如果您有多个L3,则只会选择第一个。希望这能让您走上正确的道路。

函数sortDSC(a,b){
function sortDSC(a,b) {
  if (a.level < b.level)
     return 1;
  if (a.level > b.level)
    return -1;
  return 0;
}    
myArray.sort(sortDSC);   
var maxL = myArray[0].level.substring(1, myArray[0].level.length);
console.log(maxL);//3
如果(a级b级) 返回-1; 返回0; } myArray.sort(sortDSC); var maxL=myArray[0].level.substring(1,myArray[0].level.length); console.log(maxL)//3.

功能sortDSC(a、b){
如果(a级b级)
返回-1;
返回0;
}    
myArray.sort(sortDSC);
var maxL=myArray[0].level.substring(1,myArray[0].level.length);
console.log(maxL)//3.

您可能需要考虑“level”属性可能存在的空值

var maxL= 0, next;

myArray.forEach(function(itm){
    next= (itm.level || 'L0').slice(1);
    if(maxL-next<0) maxL= +next;
});
console.log(maxL)
var maxL=0,下一步;
myArray.forEach(函数(itm){
next=(itm.level | |'L0')。切片(1);

如果(maxL next,您可能需要考虑'level'属性的可能空值

var maxL= 0, next;

myArray.forEach(function(itm){
    next= (itm.level || 'L0').slice(1);
    if(maxL-next<0) maxL= +next;
});
console.log(maxL)
var maxL=0,下一步;
myArray.forEach(函数(itm){
next=(itm.level | |'L0')。切片(1);

如果(maxL nextdo您的意思是
L
中只代表数字吗?如果是这样,用空字符串替换
L
,那么您就有了数字部分。@KingKing是的。
可以是任何数字,但
L
部分将始终是L,并且在数字之前。因此
L1
L101
是可能的。我想我需要比较数字来确定哪一个是最高的,但我似乎无法确定。你可以试试这个,你的意思是
代表
L
中的数字吗?如果是这样,用空字符串替换
L
,那么你就有了数字部分。@kinking是的。
可以是任何数字,但
L
部分始终是L,并且在数字之前。因此,
L1
L101
是可能的。我想我需要比较数字来确定哪个是最高的,但我似乎无法确定。你可以试试这个,如果数字超过一位数怎么办?@myfunkyside Fair point。因为q,我没有考虑过这一点问题。我们将使用
substr(1)
而不是像你的答案中那样的
substring(1,2)
。+1从我这里顺便说一下。
substring(1)
也可以,第二个索引是可选的,没有它意味着从开始索引到结束都是字符串。@DanielCook-这个答案比我的更快/更轻吗?(我真的感兴趣)哇,这是一个相当独立的数字,如果数字长度超过一位数怎么办?@myfunkyside Fair point。因为这个问题,我没有考虑过这个问题。我们会使用
substr(1)
而不是你答案中的
substring(1,2)
substring(1)
也可以,第二个索引是可选的,没有它意味着从开始索引到结束都要获取字符串。@DanielCook-这个答案比我的更快/更轻吗?(我是真心的)