在Javascript中检查数组中元素的类型

时间:2017-11-01 04:47:59

标签: javascript arrays types element

刚开始使用Javascript,我正在尝试检查array中元素的类型:我有一个function,其中包含两个函数parameters。我有array,其中包含stringnumber元素的组合。我们的想法是根据示例functions中的元素类型触发array,然后将新的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);

6 个答案:

答案 0 :(得分:3)

您可以使用typeof轻松完成,例如以下

对于第一个代码块

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

第二个

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

答案 1 :(得分:1)

检查一下:

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);

答案 2 :(得分:1)

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

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

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);

答案 3 :(得分:0)

您可以使用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);

Here is the output

答案 4 :(得分:0)

尝试在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);

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

答案 5 :(得分:0)

问题不在于使用typeof运算符,而是使用number和string调用的函数。

更新的代码:

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);