Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从数组中获取具有最高优先级的字符串的最有效方法_Javascript_Arrays_String_Ecmascript 6_Comparison - Fatal编程技术网

Javascript 从数组中获取具有最高优先级的字符串的最有效方法

Javascript 从数组中获取具有最高优先级的字符串的最有效方法,javascript,arrays,string,ecmascript-6,comparison,Javascript,Arrays,String,Ecmascript 6,Comparison,假设我有一个数组,如下所示: var numArray = [ 1, 2, 1, 2, 1, 1, 3, 2, 1, 3 ]; var stringArray = [ "Foo", "Very Foo", "Not So Foo", "Foo", "Very Foo", "Extremely Foo" ]; 我可以通过以下方法轻松获得最大值: Math.max.apply(Math, array); 但如果我有一个数组,如下所示: var numA

假设我有一个数组,如下所示:

var numArray = [ 1, 2, 1, 2, 1, 1, 3, 2, 1, 3 ];
var stringArray = [ "Foo", "Very Foo", "Not So Foo", 
                    "Foo", "Very Foo", "Extremely Foo" ];
我可以通过以下方法轻松获得最大值:

Math.max.apply(Math, array);
但如果我有一个数组,如下所示:

var numArray = [ 1, 2, 1, 2, 1, 1, 3, 2, 1, 3 ];
var stringArray = [ "Foo", "Very Foo", "Not So Foo", 
                    "Foo", "Very Foo", "Extremely 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; }
}
以及使用枚举值作为比较方法,以使用大于逻辑运算符

我的问题是:实现我想要实现的目标的最佳方式是什么?我提到的两种方法中的一种,或者在Javascript中有其他更有效的方法吗?

您可以使用Array#reduce,并在每次迭代中使用枚举中值最高的字符串:

var foosEnum={“不那么富”:0,“富”:1,“非常富”:2,“极端富”:3};
var stringArray=[“Foo”、“Very Foo”、“Not So Foo”、“Foo”、“Very Foo”、“Very Foo”];
var result=stringArray.reduce(函数(c,n){
返回foosEnum[c]>foosEnum[n]?c:n;
});
控制台日志(结果)您可以使用Array#reduce,并在每次迭代中获取枚举中具有最高值的字符串:

var foosEnum={“不那么富”:0,“富”:1,“非常富”:2,“极端富”:3};
var stringArray=[“Foo”、“Very Foo”、“Not So Foo”、“Foo”、“Very Foo”、“Very Foo”];
var result=stringArray.reduce(函数(c,n){
返回foosEnum[c]>foosEnum[n]?c:n;
});

控制台日志(结果)您可以按升序排列优先级,然后使用顺序索引对
stringArray
进行排序:

const stringArray=[“Foo”、“Very Foo”、“Not So Foo”,
“Foo”、“Very Foo”、“Very Foo”]
const order=[‘不那么富’、‘富’、‘非常富’、‘非常富’];
stringArray.sort((a,b)=>order.indexOf(b)-order.indexOf(a))

console.log(stringArray)
您可以按升序排列优先级,然后使用顺序索引对
stringArray
进行排序:

const stringArray=[“Foo”、“Very Foo”、“Not So Foo”,
“Foo”、“Very Foo”、“Very Foo”]
const order=[‘不那么富’、‘富’、‘非常富’、‘非常富’];
stringArray.sort((a,b)=>order.indexOf(b)-order.indexOf(a))

console.log(stringArray)
你应该有一个数字数组,如果需要显示,只需将数字转换成字符串。

你应该有一个数字数组,如果需要显示,只需将数字转换成字符串。

如果你有一个
foomantance
,您可以创建一个
fooness
函数来确定foo数组中的最大foo值

函数fooness(foo){
var fooportance=[“极端Foo”、“非常Foo”、“Foo”、“不那么Foo”];
返回fooportance.indexOf(foo);
}
var stringArray=[“Foo”、“Very Foo”、“Not So Foo”、“Foo”、“Very Foo”、“Very Foo”];
stringArray.sort(函数(a,b){
返回丰满度(a)>丰满度(b);
});
var mostFoo=stringArray[0];

console.log(mostFoo)
如果您有一个
fooportance
数组,那么您可以创建一个
fooness
函数来确定foo数组中的最大foo值

函数fooness(foo){
var fooportance=[“极端Foo”、“非常Foo”、“Foo”、“不那么Foo”];
返回fooportance.indexOf(foo);
}
var stringArray=[“Foo”、“Very Foo”、“Not So Foo”、“Foo”、“Very Foo”、“Very Foo”];
stringArray.sort(函数(a,b){
返回丰满度(a)>丰满度(b);
});
var mostFoo=stringArray[0];

console.log(mostFoo)
我喜欢这个数组。在这里减少使用。非常干净,这意味着我不必用排序修改我的原始数组。但是,如果我们找到可能的最高值“极端Foo”,您认为有可能破坏reduce执行吗?考虑通过数组完成迭代是毫无意义的。你不能突破数组#reduce,但你可以使用旧的for或while循环在找到某个东西时中断。但是,如果我们讨论的是短数组,您不会一直迭代,并且您也不会期望“极端Foo”以非常高的频率出现,那么没有意义的情况不会经常出现。谢谢您的回答。:)在Foo中,我们信任:)我喜欢这个数组。减少这里的使用。非常干净,这意味着我不必用排序修改我的原始数组。但是,如果我们找到可能的最高值“极端Foo”,您认为有可能破坏reduce执行吗?考虑通过数组完成迭代是毫无意义的。你不能突破数组#reduce,但你可以使用旧的for或while循环在找到某个东西时中断。但是,如果我们讨论的是短数组,您不会一直迭代,并且您也不会期望“极端Foo”以非常高的频率出现,那么没有意义的情况不会经常出现。谢谢您的回答。:)在Foo,我们相信:)Foooness和Foooportance hehep+1,但我认为array.reduce答案更符合我的要求。@snaplemouton-很公平,我个人希望减少一点食物->食物和食物重要性,呵呵p+1,但是我认为array.reduce答案更适合我所寻找的。@snaplemouton-很公平,我个人希望减少一点食物->