【问题标题】:Checking the type of an element in an array in Javascript在Javascript中检查数组中元素的类型
【发布时间】:2018-04-13 09:22:09
【问题描述】:

刚开始使用 Javascript 并试图检查 array 中元素的类型:我有一个 function,它具有两个函数作为 parameters。我有一个array,它结合了stringnumber 元素。这个想法是根据样本array中的元素类型触发functions,然后将新的element推送到新的array。我不确定我可以在这里使用哪个内置功能。我试过indexOftypeof 但这些似乎没有达到目的,或者我做错了。下面是代码。非常感谢!

var arr1 = [3, "Hello", 5, "Hola"];

function setNewArray(arr, funct1, funct2){
    var arr2 = [];

    for(var i = 0; i < arr.length; i++){
        if(/*check if arr[i] is a string*/){
            arr2.push(funct1(arr[i]));
        }

        if(/*check if arr[i] is a number*/){
            arr2.push(funct2(arr[i]));
        }       
    }
    return arr2;
}


var numfunct = function(item){
    return item * 2;
}


var strfunct = function(item){
    return item + " " + "there";
}

var result = setNewArray(arr1, numfunct, strfunct);
console.log(result);

【问题讨论】:

标签: javascript arrays types element


【解决方案1】:

您可以使用typeof 轻松做到这一点,如下所示

对于第一个代码块

if(typeof arr[i] === 'string'){
     arr2.push(   
     funct1(arr[i]));
}

第二个

if(typeof arr[i] === 'number'){
      arr2.push(
      funct2(arr[i]));
    }   

【讨论】:

  • 非常感谢@gypsyCoder!
  • @Ben 如果您认为这个解决了您的问题,请将其标记为答案。
  • 您的代码没有解决问题,因为 OP 的代码还有另一个问题,他们将数字函数传递为 func1(字符串函数也是如此),这就是为什么我相信您的问题未被接受。
【解决方案2】:

您可以使用typeof 来检查任何变量或对象的类型。而且您不需要传递函数refrence。代码如下:

var arr1 = [3, "Hello", 5, "Hola"];

function setNewArray(arr) {
  var arr2 = [];

  for (var i = 0; i < arr.length; i++) {

    if (typeof arr[i] === 'string') {
      arr2.push(
        strfunct(arr[i]));
    }

    if (typeof arr[i] === 'number') {
      arr2.push(
        numfunct(arr[i]));
    }
  }
  return arr2;
}

var numfunct = function (item) {
  return item * 2;
}

var strfunct = function (item) {
  return item + " " + "there";
}

var result = setNewArray(arr1);
console.log(result);

【讨论】:

  • 非常感谢,阿米特!
  • 将函数作为参数传递使代码更加灵活。
【解决方案3】:

尝试在javascript中使用typeof运算符

var arr1 = [3, "Hello", 5, "Hola"];

function setNewArray(arr, funct1, funct2) {
    var arr2 = [];
    for (var i = 0; i < arr.length; i++) {
        if (typeof arr[i] == 'string') {
            arr2.push(funct1(arr[i]));
        }
        if (typeof arr[i] == 'number') {
            arr2.push(funct2(arr[i]));
        }
    }
    return arr2;
}


var numfunct = function (item) {
    return item * 2;
}


var strfunct = function (item) {
    return item + " " + "there";
}

var result = setNewArray(arr1, strfunct, numfunct);
console.log(result);

我认为这正是您正在寻找的功能。

【讨论】:

    【解决方案4】:

    检查一下:

    var arr1 = [3, "Hello", 5, "Hola" ];
    
    function setNewArray(arr, funct1, funct2){
    
        var arr2 = [];
    
        for(var i = 0; i < arr.length; i++){
    
            if(!isNaN(arr[i])){ // or use this alternative typeof arr[i]  == 'number'
             arr2.push(   
                funct1(arr[i]));
            }
    
    
            if(typeof (arr[i]) == 'string'){
    
              arr2.push(
    
                  funct2(arr[i]));
            }       
    
    
        }
        return arr2;
        }
    
    
    var numfunct = function(item){
    
        return item * 2;
    
    }
    
    
    var strfunct = function(item){
    
        return item + " " + "there";
    }
    
    var result = setNewArray(arr1, numfunct, strfunct);
    console.log(result);

    【讨论】:

    • 为什么不只是 typeof arr[i] === "number"isNaN 在这种情况下似乎只提供了一个优势,而且在极不可能的情况下。
    • @Taurus 我编辑了我的答案。我只是想使用另一种选择。
    • 我建议当时对其进行编辑,该替代方案与此处的其他解决方案略有不同,通过此编辑,您的答案看起来像是对该问题的所有其他答案的一对一克隆。
    • @Taurus 两者怎么样? :-)
    • 不错但几乎看不见:)
    【解决方案5】:

    问题不在于使用 typeof 运算符,而在于使用数字和字符串调用的函数。

    更新代码:

    var arr1 = [3, "Hello", 5, "Hola" ];
    
    function setNewArray(arr, funct1, funct2){
    
        var arr2 = [];
    
        for(var i = 0; i < arr.length; i++){
    
            if(typeof arr[i] == "string"){
             arr2.push(   
                funct2(arr[i]));
            }
    
    
            if(typeof arr[i] == "number"){
    
              arr2.push(
    
                  funct1(arr[i]));
            }       
    
    
        }
        return arr2;
        }
    
    
    var numfunct = function(item){
    
        return item * 2;
    
    }
    
    
    var strfunct = function(item){
    
        return item + " " + "there";
    }
    
    var result = setNewArray(arr1, numfunct, strfunct);
    console.log(result);
    

    【讨论】:

      【解决方案6】:

      创建一个函数对象,其中每个函数名都是它可以处理的类型。使用Array#map 迭代数组,并使用typeof 从对象中选择正确的方法。

      注意:我添加了一个布尔处理程序来将 true 转换为 yes。

      var arr1 = [3, "Hello", 5, "Hola", true];
      
      var fns = {
        number(item) {
            return item * 2;
        },
        
        string(item) {
          return item + " " + "there";
        },
        
        boolean(item) {
          return item ? 'yes' : 'no'
        }
      };
      
      function setNewArray(arr, fns) {
        return arr.map(function(item) {
          return fns[typeof item](item);
        });
      }
      
      var result = setNewArray(arr1, fns);
      console.log(result);

      【讨论】:

      • 所有这一切都是不必要和不必要的聪明。
      猜你喜欢
      • 1970-01-01
      • 2013-12-27
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      相关资源
      最近更新 更多