【问题标题】:Iterating an array迭代数组
【发布时间】:2013-09-14 11:47:29
【问题描述】:

我已经构建了一个如下所示的数组

iArray = [true, true, false, false, false, false, false, false, true, true, true, false, 
true, false, false, false, false, true] 

条件检查: 如果此数组中的任何值是 false 我将显示 error 消息 否则,如果一切正常,我将显示 success 消息。

我厌倦了下面的代码进行迭代,但是无法构建其中的逻辑。

var boolIteration = iArray.split(',');
var i;
for (i = 0; i < boolIteration.length; ++i) {
    //conditional check
}

我正在努力使用上述条件迭代数组。

谁能用有效的解决方案为我指明正确的方向。

【问题讨论】:

  • iArray 已经是一个数组,为什么要像字符串一样拆分它?
  • @Kolink 以迭代其中的值。有错吗?
  • 呃,是的! .split是通过分隔符将一个字符串转成数组!
  • if(~$.inArray(false, iArray)){...}
  • @A.Wolff 虽然我想做这个 JS。既然您提到indexOf 在 IE 中存在兼容性问题,我将使用您的 jQuery 解决方案。谢谢。

标签: javascript jquery arrays


【解决方案1】:

不需要 jQuery

if (iArray.indexOf(false) !== -1) {
    // error
}

另外,正如之前的评论者已经指出的,iArray 已经是一个数组,没有必要在上面使用split

Array.prototype.indexOf 在低于 9 的 Internet Explorer 中不可用。但是,可以使用匹配算法轻松添加此功能。请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf 了解兼容性以及如何创建解决方法。

【讨论】:

  • 这里唯一的问题是旧IE版本缺少用于原型数组的indexOf方法
  • @A.Wolff 你是绝对正确的。默认情况下,低于 IE9 indexOf 是禁止的,但可以填充。
  • ... 对于这样简单的事情,一个 shim 仍然比加载 jQuery 更好。 jQuery 解决方案只有在已经使用 jQuery 时才更可取。
  • +1 感谢您向我展示 JS 中的方法。由于我已经在使用 jQuery,所以我将使用上面的。
【解决方案2】:

iArray已经是数组了,不需要再拆分(拆分是String的方法,Arrays没有)

您需要做的是检查false 值的索引,如果存在则数组中存在错误值。

使用 jQuery - 由于 IE 兼容性,不使用数组 indexOf

iArray = [true, true, false, false, false, false, false, false, true, true, true, false, 
true, false, false, false, false, true] 
if($.inArray(false, iArray ) != -1){
    //error
}

【讨论】:

  • +1 我以为是indexOf,但是 jQuery 有一个非常简单的方法来处理这个问题。谢谢你的指点。
【解决方案3】:
 var iArray = [true, true, false, false, false, false, false, false, true, true, 
true, false,true, false, false, false, false, true];

    for (var i = 0; i < iArray.length; i++) {
        if (iArray[i]) {
            alert("success");
        }
        else {
            alert("error");
        }
    }

【讨论】:

  • i 小于一个数组?这是一个新的。
  • 是的。如果数组的大小是 10,那么他的最后一个元素的索引将是 9。第一个元素总是有 0 作为索引。
  • @Kolink 你只是充满建设性的批评,不是吗?
  • @AlexanderPerechnev 他试图变得有趣和/或聪明。他应该说的是你应该把for (var i = 0; i &lt; iArray.length; i++)
  • @IngoBürk 在这里不行。人们会发布几乎所有内容,只是为了首先获得他们的答案,然后再将其编辑为(希望)正确的内容。它被称为饥饿点,这个网站充满了它。悲伤熊猫.jpg
【解决方案4】:

替代方案:

if (/false/i.test(iArray)) { }

if ( ''.replace.call(iArray,/true|,/g,'').length ) { }

【讨论】:

  • .sort 修改原始数组,它不返回排序后的数组。
  • 此外,sort 的性能比indexOf 差。如果您不想使用indexOf,即使遍历数组也会更好。
  • 新的替代方案似乎不必要地神秘和复杂。当然,人们可以理解他们的工作,但不能不看它。这样的解决方案有什么意义?他们什么时候比“正常”解决方案更好?
  • 你正在进入极客区,注意:3
  • 如果你只是想要“奇怪”的解决方案,这里有另一个:iArray.reduce(function (a,b) { return a &amp;&amp; b; });
【解决方案5】:

jQuery.inArray 函数非常适合检查特定值是否包含在数组中。

iArray = [true, true, false, false, false, false, false, false, true, true, true, false, true, false, false, false, false, true];
if ($.inArray(iArray, false) >= 0) {
  // the value "false" is contained within the array, show an error message
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2013-01-16
    • 2020-03-29
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多