📜  最有用的 JavaScript 数组函数——第 1 部分

📅  最后修改于: 2022-05-13 01:58:10.149000             🧑  作者: Mango

最有用的 JavaScript 数组函数——第 1 部分

在本文中,我们将讨论以下两个 JavaScript 数组函数。这两个函数都在工业中广泛使用,使 JavaScript 代码干净、模块化、易于理解。

  1. Array.prototype.every()
  2. Array.prototype.some()

Array.prototype.every():当您需要验证给定数组的每个元素时使用此函数。它接受一个回调函数作为为数组的每个元素调用的参数。回调函数必须返回 true 或 false。如果数组的所有元素都满足验证函数,因此回调函数对数组的所有元素都返回 true,那么它返回 true。否则,一旦遇到不满足验证器函数的第一个元素,它就会返回 false。

句法:

arr.every(callback(element[, index[, array]])[, thisArg])

参数:该函数接受上面提到的五个参数,如下所述:

  • callback:此参数保存要为数组的每个元素调用的函数。
  • currentValue:该参数保存当前正在处理的元素的值。
  • index:该参数是可选的,它保存从0开始的数组中currentValue元素的索引。
  • array:这个参数是可选的,它保存了调用 Array.every 的完整数组。
  • thisArg:此参数是可选的,它保存要作为 this 传递的上下文,以便在执行回调函数时使用。如果传递了上下文,则每次调用回调函数时都将其用作this ,否则将使用 undefined 作为默认值。

示例:给定一个数组,编写一个函数来检查该数组的所有元素是否小于 100。

  • 程序 1:在这段代码中,我们将使用循环函数检查数组。所以天真的方法是使用如下所示的循环。

    尽管对于任何新手程序员来说,下面的实现都很容易理解,但程序员必须注意一些不必要的检查。例如,短路机制,即程序员必须明确确保一旦循环遇到第一个不符合给定条件的元素,循环应该中断并返回假。此外,除非程序员深入研究代码的逻辑,否则他/她将无法理解这个 for 循环在做什么。

    let numbers = [30,60,190];
    let result = true;
    for (let i = 0; i < numbers.length; i++) {
        if (numbers[i] >= 100) {
            result = false;
            break;
        }
    }
    document.write(result);
    

    输出:

    false
  • 程序 2:在这段代码中,我们将使用Array.prototype.every()函数检查数组。所以天真的方法是使用如下所示的循环。

    通过使用Array.every() ,可以使用更清晰、直观和更少的代码来实现相同的行为。

    let numbers = [30,60,90];
    let result = numbers.every(function(element){
       return(element < 100);
     });
       
    document.write(result);
    

    输出:

    true

示例:给定一个数组,编写一个函数来检查该数组的所有元素是否都属于指定的数据类型。

  • 程序 1:再次天真的方法是使用 for 循环遍历数组。此代码片段与上一个示例具有相同的漏洞。
    function fnCheckDatatype_Every(arr, sDatatype){
        for(var i = 0 ; i < arr.length; i ++)
        {
          if(typeof(arr[i]) !== sDatatype)
          {
              return false;
          }
        }
    }
      
    fnCheckDatatype_Every(["Geeks",4,"Geeks"],"string");
    fnCheckDatatype_Every(["Geeks","for","Geeks"],"string");
    
    true
    false
    
  • 程序 2:使用 arr.Every() 这些漏洞在下面的代码片段中再次得到处理。下面代码片段中要注意的另一点是我们将两个参数传递给 array.every()函数。第一个是回调函数(在我们的例子中是匿名函数),第二个是 sDatatype。因为我们在每次调用回调函数时都需要一个外部变量,所以我们将它作为第二个参数作为“this”变量传递。
    function fnCheckDatatype_Every(arr, sDatatype){
    return arr.every(function(element){
                return typeof(element) === sDatatype;
            },sDatatype);
    }
      
    fnCheckDatatype_Every(["Geeks","for","Geeks"],"string");
    fnCheckDatatype_Every(["Geeks",4,"Geeks"],"string");
    

    输出:

    true
    false
    

Array.prototype.some():这与Array.every()相反。当您需要检查给定数组的至少一个元素是否通过了回调函数。 Array.some() 接受一个回调函数作为参数,它必须返回一个真或假。为数组的每个元素调用回调函数,直到它为数组的至少一个元素返回 true。如果数组中没有一个元素通过回调函数的测试,则返回false。

句法:

arr.some(callback(element[, index[, array]])[, thisArg])

参数:此函数接受四个参数,如上所述,如下所述:

  • callback:此参数保存要为数组的每个元素调用的函数。
  • currentValue:该参数保存当前正在处理的元素的值。
  • index:该参数是可选的,它保存从0开始的数组中currentValue元素的索引。
  • array:这个参数是可选的,它保存了调用 Array.every 的完整数组。
  • thisArg此参数是可选的,它保存要作为 this 传递的上下文,以便在执行回调函数时使用。如果传递了上下文,则每次调用回调函数时都将其用作this ,否则将使用 undefined 作为默认值。

示例:给定一个数组,编写一个函数来检查一个数组是否包含任何大于 100 的数字。

  • 程序 1:朴素的方法
    function fnIsGreaterThan100_loop(arr){
        for(var i = 0 ; i < arr.length; i ++){
          if(arr[i] > 100){
              return true;
          }
       }
       return false;
    }
      
    fnIsGreaterThan100_loop([30,60,90,120]);
    fnIsGreaterThan100_loop([30,60,90]);
    

    输出:

    true
    false
    
  • 程序 2:使用 Array.some()
    function fnIsGreaterThan100_some(arr){
         return arr.some(function(element){
                return(element> 100);
         });
    }
      
    fnIsGreaterThan100_some([30,60,90,120]);
    fnIsGreaterThan100_some([30,60,90]);
    

    输出:

    true
    false
    

示例:给定一个数组,编写一个函数来检查数组是否包含偶数。

  • 方案 1:天真的方法
    function fnIsEven_loop(arr){
        for(var i = 0 ; i < arr.length; i ++){
          if(arr[i] % 2 === 0){
              return true;
          }
        }
        return false;
    }
      
    fnIsEven_loop([1,3,5]);
    fnIsEven_loop([1,3,5,6]);
    

    输出:

    false
     true
    
  • 程序 2:使用 Array.some()
    function fnIsEven_some(arr){
           return arr.some(function(element){
                return(element %2 === 0);
           });
    }
      
    fnIsEven_some([1,3,5]);
    fnIsEven_some([1,3,5,6]);
    

    输出:

    false
     true
    

程序员在使用 Array.every() 和 Array.some() 等数组函数时常犯的错误之一是他们忘记了回调函数中的返回值。请注意,如果您没有从回调函数返回任何值,则会返回 null,这将被解释为 false。

此外,重要的是要知道这些数组函数是在 ECMAScript 5 中引入的。因此,IE9 或更高版本支持这些函数。如果您还需要将它用于旧版浏览器,那么像 underscore.js 这样的库可以为您提供帮助,它具有此类功能的等效实现。

必须使用 JavaScript 数组函数 - 第 2 部分

必须使用 JavaScript 数组函数 - 第 3 部分

此外,如果您想深入了解上述功能,可以参考以下官方链接
1. http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.16
2. http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.17

关于作者:

“Harshit 是一名技术爱好者,对编程有着浓厚的兴趣。他持有一个严厉的耆那教 B.技术。 JIIT, Noida 的计算机科学学位,目前在 SAP 担任前端开发人员。他还是国家级乒乓球运动员。除此之外,他还喜欢看电影和英语情景喜剧来放松身心。他常驻德里,您可以通过 https://in.linkedin.com/pub/harshit-jain/2a/129/bb5 与他联系

如果您还想在这里展示您的博客,请参阅 GeeksforGeeks 上的客座博客文章。