Javascript 循环数组以在jQuery中设置value=vals[0]| | vals[1]| | vals[2]

Javascript 循环数组以在jQuery中设置value=vals[0]| | vals[1]| | vals[2],javascript,jquery,loops,each,Javascript,Jquery,Loops,Each,我有两个数组。例如: var bool = [true, false, true]; var vals = ['hi','med','lo']; 使用jQuery,我想循环遍历它们,以便测试每个bool,并将var设置为vals数组中的最高可用值,该值位于bool数组中第一个true之后: var value = ( bool[0] ) ? vals[0] || vals[1] || vals[2] : ( bool[1] ) ? vals[1]

我有两个数组。例如:

var bool = [true, false, true];
var vals = ['hi','med','lo'];
使用jQuery,我想循环遍历它们,以便测试每个bool,并将
var
设置为
vals
数组中的最高可用值,该值位于
bool
数组中第一个
true
之后:

var value = ( bool[0] ) ? vals[0] || vals[1] || vals[2] :
                        ( bool[1] ) ? vals[1] || vals[2] : vals[2] ;
我想让数组可以有更多的值(但每个值的大小总是匹配的)。是否可以使用
。每个
函数实现这一点?

请参阅。重要的部分是:

签名

each(集合、回调(indexInArray、valueOfElement))

…以及如何“打破”:

通过使回调函数返回false,我们可以在特定迭代中中断$.each()循环

快乐编码。

请参阅。重要的部分是:

签名

each(集合、回调(indexInArray、valueOfElement))

…以及如何“打破”:

通过使回调函数返回false,我们可以在特定迭代中中断$.each()循环

快乐编码。

那么:

这需要为IE8及以下版本添加垫片,但上面的链接中有一个很好的垫片


编辑

因此,从第一个
true
的索引切片值数组。然后减少切片数组,直到达到第一个真实值。

如何:

这需要为IE8及以下版本添加垫片,但上面的链接中有一个很好的垫片


编辑


因此,从第一个
true
的索引切片值数组。然后减少切片数组,直到达到第一个真实值。

编辑:似乎需要从
vals
bool
中获取第一个真实值。这是一个不需要任何函数的解决方案

var value, i = 0;

while( !bool[i] && ++i < bool.length );

while( !(value = vals[i]) && ++i < vals.length );

编辑:您似乎需要
vals
bool
中的第一个真实值。这是一个不需要任何函数的解决方案

var value, i = 0;

while( !bool[i] && ++i < bool.length );

while( !(value = vals[i]) && ++i < vals.length );
试试这个:

var goal;
var bools = [true, false, true];
var vals = ['high', 'med', 'lo'];
jQuery.each(vals, function(i, value) {
    if (bools[i] === true) // or use if (bools[i]) but that will also be true for "truthy" non-bools
    {
        goal = value;
        return false; // this breaks from the each loop
    }
});
试试这个:

var goal;
var bools = [true, false, true];
var vals = ['high', 'med', 'lo'];
jQuery.each(vals, function(i, value) {
    if (bools[i] === true) // or use if (bools[i]) but that will also be true for "truthy" non-bools
    {
        goal = value;
        return false; // this breaks from the each loop
    }
});


太具体了。对其他人没有任何用处。我不理解
|
操作符的意义。它们都是真实值,因此您总是在第一个
|
之前获得值。我遗漏了什么?@patrick dw在实际情况中,VAL可能不是。它们来自可能为空的数据属性。这里有一些很棒的东西。让我们看看我是否可以把这些放在一起得到所有的东西……是否有可能在
bool
中没有
true
值?似乎您正在使用
vals[2]
作为默认值,而没有测试
bool[2]
。只是好奇,太具体了。对其他人没有任何用处。我不理解
|
操作符的意义。它们都是真实值,因此您总是在第一个
|
之前获得值。我遗漏了什么?@patrick dw在实际情况中,VAL可能不是。它们来自可能为空的数据属性。这里有一些很棒的东西。让我们看看我是否可以把这些放在一起得到所有的东西……是否有可能在
bool
中没有
true
值?似乎您正在使用
vals[2]
作为默认值,而没有测试
bool[2]
。只是好奇。似乎OP想要从您刚刚计算的索引开始的
vals
中的第一个真实值(这就是我读取
|
s的方式)。@iabstractdownvotefactory啊,太棒了。我只需要弄清楚用| |得到它的部分。可能是某个带有/
indexOf
++的东西,直到它到达数组的底部?@IAbstractDownvoteFactory是
indexOf
然后
reduce
+1的很好的组合,了解一些新函数确实很有用。不过,我并没有完全让它在Chrome中工作。(Chrome应该不需要补丁吧?@iabstractdownvotefactory K thx–我会再试一次;)似乎OP希望从您刚刚计算的索引开始计算
vals
中的第一个真实值(这就是我读取
|
s的方式)。@iabstractdownvotefactory啊,太棒了。我只需要弄清楚用| |得到它的部分。可能是某个带有/
indexOf
++的东西,直到它到达数组的底部?@IAbstractDownvoteFactory是
indexOf
然后
reduce
+1的很好的组合,了解一些新函数确实很有用。不过,我并没有完全让它在Chrome中工作。(Chrome应该不需要补丁吧?@iabstractdownvotefactory K thx–我会再试一次;)再次感谢/我明白你的意思,但我不太明白。我添加了
返回值,它不断给我
vals[1]
(第二个值)。while循环是否需要在条件之后的
{}
中使用语句?对
{value=vals[i]| | vals[i++]}
@ryanve有点不寻常的结构,但是
while循环只有空语句
。所有的工作都是由
(…)
之间的表达式完成的,因此块
{…}
中不需要任何代码。结果将由
变量保存。区别在于,如果没有成功匹配,
结果
将是
未定义的
。如果
vals
中的最后一个值应该是默认值,那么很容易修复。我将更新我的答案,并进一步解释发生了什么……如果您总是得到
VAL[1]
,则说明其他问题,或者我没有正确理解需求。我将提供另一个更新,并以一个实例作为一个函数。感谢您的精彩解释——我让它工作了!是,有最后一个值作为回退。它实际上使
vals
数组有一个额外的值,因此我要添加一个额外的
true
var goal;
var bools = [true, false, true];
var vals = ['high', 'med', 'lo'];
jQuery.each(vals, function(i, value) {
    if (bools[i] === true) // or use if (bools[i]) but that will also be true for "truthy" non-bools
    {
        goal = value;
        return false; // this breaks from the each loop
    }
});