比方说,我有一个数组如下:最有效的方式来获得具有最高优先级的串出数组的
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" ];
那么这将是最有效的方式,以获得最大值O最重要的是,按照重要性顺序排列:“Veryly 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用法。非常干净,这意味着我不必修改我的原始数组。 – snaplemouton
如果我们找到最高可能值“Extremely Foo”,您是否认为有可能打破减少执行?考虑到完成迭代通过数组将是毫无意义的。 – snaplemouton
你不能摆脱数组#减少,但你可以使用旧的for或while循环来找到某些东西。但是,如果我们谈论的是短阵列,并不是所有的时间都在进行迭代,而且你也不希望“极富特征”以非常高的频率出现,那么毫无意义就不会经常出现。 –