我有一个对象数组。这些对象具有一个名为level
的属性,该属性是一个包含数字且格式一致的字符串。
我试图找到最高的数字并返回那个但我似乎被阻止了如何从我当前的代码继续。
以下是我当前代码的小提琴:http://jsfiddle.net/6sXYR/
这是我的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) );
};
我想要得到的结果是只返回上面例子中的数字'3'。最高的数字可能并不总是在数组的最后一个对象中,但它始终采用L#格式。
答案 0 :(得分:3)
使用Math.max的另一个选项:
console.log(Math.max.apply(null, myArray.map(function (e) {
return +e.level.substr(1); // Using substr to allows values like L10 etc.
})));
答案 1 :(得分:2)
试试这个( http://jsfiddle.net/QQv7E/ ):
var highestNum=0;
for (var i=0; i<myArray.length; i++) {
var num = parseInt(myArray[i].level.substring(1));
if (num > highestNum) {
highestNum = num;
}
}
console.log(highestNum);
<强>更新强>
正如King King在对您的问题的评论中提到的那样,如果没有其他特殊理由将您的关卡置于此格式:L#
,
你也可以只把数字放在那里(int
格式,而不是string
)。
结果就是这一行:
var num = parseInt(myArray[i].level.substring(1));
变成这一行:
var num = myArray[i].level;
删除substring()
和parseInt()
功能,使您的代码更有效。
答案 2 :(得分:1)
您可能想要考虑“&#39;等级”的可能空值。属性。
var maxL= 0, next;
myArray.forEach(function(itm){
next= (itm.level || 'L0').slice(1);
if(maxL-next<0) maxL= +next;
});
console.log(maxL)
// maxL = 3
答案 3 :(得分:0)
使用冒泡排序,对于非常小的集合,你可以这样做:
var _sorted = myArray.sort(function(a,b) {
return b.level.substring(1,2) - a.level.substring(1,2);
});
console.log(_sorted[0]);
现在请注意,这会部分解决您的问题,因为如果您有多个L3,则只会选择第一个。希望这能让你开始走上正确的道路。
答案 4 :(得分:-1)
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