【问题标题】:Check array to see if it contains one of the two specified values检查数组以查看它是否包含两个指定值之一
【发布时间】:2014-09-04 19:13:07
【问题描述】:

我需要帮助来确定一个数组是否包含两个特定字符串以外的字符串。例如,如果一个字符串有“a”以外的任何内容,它应该会失败。区分大小写并不重要。

var array = ["a", "a", "a", "b"]; // this should fail
var array2 = ["a", "a", "a", "a"]; // this should pass

我在想这样的事情:

var abFound = false;
// Run a for loop and look for the contents of the array element (indexOf) to see if it equals "a" or "b", if it does set abFound to true.

有什么建议或更好的方法吗?

谢谢。

【问题讨论】:

  • 循环遍历数组,当你看到除"a" return false 以外的任何东西的那一刻?听起来并不复杂。
  • 这是你的课堂作业吗?

标签: javascript arrays search


【解决方案1】:

根据不等于要检查的元素进行过滤,并检查它的长度是否为0。

var not_a = array.filter(function(value) { return value != 'a' }).length != 0;

【讨论】:

    【解决方案2】:

    你可以试试这个

    var filtered = array.filter(function(value){
    return value === 'a';
     });
    if(filtered.length === array.length){
    console.log("pass")
    } else{
    console.log("fail")
    }
    

    【讨论】:

    • 与 dave 相同的评论 - 请学习您的 ES5 功能。使用Array.prototype.every 可以更有效地实现这一点。
    【解决方案3】:

    函数Array.prototype.some 可用于迭代数组,根据提供的谓词测试该数组的每个元素,并在谓词返回true 时立即返回true

    var not_A = array.some(function(s) {
       return s !== 'a';
    });
    

    如果谓词为数组中的每个元素返回false,那么.some 的最终返回值也是false

    您也可以使用具有相反行为的Array.prototype.every - 只要任何谓词测试失败,它就会返回false,并且仅在谓词为每个返回true 时返回true > 数组元素:

    var all_A = array.every(function(s) {
        return s === 'a';
    });
    

    使用Array.prototype.filter 效率低下,因为它需要测试数组中的每一个元素,而一旦发现相反的结果就没有机会提前终止。

    【讨论】:

      猜你喜欢
      • 2011-04-20
      • 1970-01-01
      • 2019-10-03
      • 2023-03-12
      • 2021-06-06
      • 1970-01-01
      • 2021-01-03
      • 2016-02-04
      • 1970-01-01
      相关资源
      最近更新 更多