我们说我有一个数组如下:
var numArray = [ 1, 2, 1, 2, 1, 1, 3, 2, 1, 3 ];
我可以通过使用:
轻松获得最大值Math.max.apply(Math, array);
但是如果我有一个数组如下:
var stringArray = [ "Foo", "Very Foo", "Not So Foo",
"Foo", "Very Foo", "Extremely Foo" ];
那么从最重要的价值中获取最大价值的最有效方法是什么,最重要的是按重要性排序:"极端Foo" > "非常好" > "富" > "不那么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中采用不同的方式更有效?
答案 0 :(得分:1)
您可以使用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);
答案 1 :(得分:1)
如果你有一个fooportance
数组,你可以创建一个fooness
函数来确定foos数组中最大的foo值
function fooness(foo) {
var fooportance = ["Extremely Foo", "Very Foo", "Foo", "Not So Foo"];
return fooportance.indexOf(foo);
}
var stringArray = ["Foo", "Very Foo", "Not So Foo", "Foo", "Very Foo", "Extremely Foo"];
stringArray.sort(function(a, b) {
return fooness(a) > fooness(b);
});
var mostFoo = stringArray[0];
console.log(mostFoo)
&#13;
答案 2 :(得分:0)
您可以按升序排列优先级数组,然后使用订单索引对stringArray
进行排序:
const stringArray = [ "Foo", "Very Foo", "Not So Foo",
"Foo", "Very Foo", "Extremely Foo" ]
const order = ['Not so Foo', 'Foo', 'Very Foo', 'Extremely Foo'];
stringArray.sort((a, b) => order.indexOf(b) - order.indexOf(a))
console.log(stringArray)
答案 3 :(得分:0)
如果需要显示数字,您应该有一个数字数组,只需将数字转换为字符串。
答案 4 :(得分:0)
您可以将键映射到数字(您有四个键,因此:0,1,2,3),然后使用数字对字符串进行排序,之后最高字符串将位于第一个位置( 0):
var myMap = {"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" ];
stringArray.sort(function(a,b){
return myMap[b] - myMap[a];
});
var highest = stringArray[0];