假设我有一个数组,如下所示:
var numArray = [ 1, 2, 1, 2, 1, 1, 3, 2, 1, 3 ];
我可以通过使用以下方法轻松获得最大值(value):
Math.max.apply(Math, array);
但是如果我有一个如下数组怎么办:
var stringArray = [ "Foo", "Very Foo", "Not So Foo",
"Foo", "Very Foo", "Extremely Foo" ];
那么,从中获得最大值(value)的最有效方法是什么,最大值(value)是,按照重要性顺序:“Extremely Foo”>“Very Foo”>“Foo”>“Not So Foo”
首先想到的是使用循环迭代数组并手动进行比较:
var maxValue = "";
for(var i = 0; i < stringArray.length; i++) {
if(maxValue != "Extremely Foo") {
if(maxValue != "Very Foo") {
if(maxValue != "Foo") {
maxValue = stringArray[i];
}
else if(stringArray[i] != "Not So Foo") {
maxValue = stringArray[i];
}
}
else if(stringArray[i] == "Extremely Foo") {
maxValue = stringArray[i];
break;
}
}
else { break; }
}
然后我考虑创建一个枚举来为每个不同的字符串赋予一个值:
enum Foos {
Not So Foo = 0,
Foo = 1,
Very Foo = 2,
Extremely Foo = 3,
}
并使用枚举值作为比较方法来代替使用大于逻辑运算符。
我的问题是:实现我想要实现的目标的最佳方法是什么?我提到的两种方法之一或者是否有其他更有效的 JavaScript 方法?
最佳答案
您可以使用 Array#reduce,并在每次迭代时采用枚举中具有最高值的字符串:
var foosEnum = { "Not So Foo": 0, "Foo": 1, "Very Foo": 2, "Extremely Foo": 3 };
var stringArray = [ "Foo", "Very Foo", "Not So Foo", "Foo", "Very Foo", "Extremely Foo" ];
var result = stringArray.reduce(function(c, n) {
return foosEnum[c] > foosEnum[n] ? c : n;
});
console.log(result);
关于javascript - 从数组中获取具有最高优先级的字符串的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45574811/