How to check if an object is an array?

后端 未结 30 2882
名媛妹妹
名媛妹妹 2020-11-21 06:31

I\'m trying to write a function that either accepts a list of strings, or a single string. If it\'s a string, then I want to convert it to an array with just the one item so

相关标签:
30条回答
  • 2020-11-21 07:05

    easiest and fastest way to check if an Object is an Array or not.

     var arr = [];
      arr.constructor.name ==='Array'  //return true;
    

    or

    arr.constructor ===Array //return true;
    

    or you can make a utility function:

    function isArray(obj){ return obj && obj.constructor ===Array}
    

    usage:

    isArray(arr); //return true
    
    0 讨论(0)
  • 2020-11-21 07:05

    In your case you may use concat method of Array which can accept single objects as well as array (and even combined):

    function myFunc(stringOrArray)
    {
      var arr = [].concat(stringOrArray);
    
      console.log(arr);
    
      arr.forEach(function(item, i)
      {
        console.log(i, "=", item);
      })
    }
    
    myFunc("one string");
    
    myFunc(["one string", "second", "third"]);
    

    concat seems to be one of the oldest methods of Array (even IE 5.5 knows it well).

    0 讨论(0)
  • 2020-11-21 07:06

    The best solution I've seen is a cross-browser replacement for typeof. Check Angus Croll's solution here.

    The TL;DR version is below, but the article is a great discussion of the issue so you should read it if you have time.

    Object.toType = function(obj) {
        return ({}).toString.call(obj).match(/\s([a-z|A-Z]+)/)[1].toLowerCase();
    }
    // ... and usage:
    Object.toType([1,2,3]); //"array" (all browsers)
    
    // or to test...
    var shouldBeAnArray = [1,2,3];
    if(Object.toType(shouldBeAnArray) === 'array'){/* do stuff */};
    
    0 讨论(0)
  • 2020-11-21 07:07

    This is the fastest among all methods (all browsers supported):

    function isArray(obj){
        return !!obj && obj.constructor === Array;
    }
    
    0 讨论(0)
  • 2020-11-21 07:07

    There is a nice example in Stoyan Stefanov's book JavaScript Patterns which suppose to handle all possible problems as well as utilize ECMAScript 5 method Array.isArray().

    So here it is:

    if (typeof Array.isArray === "undefined") {
        Array.isArray = function (arg) {
            return Object.prototype.toString.call(arg) === "[object Array]";
        };
    }
    

    By the way, if you are using jQuery, you can use it's method $.isArray()

    0 讨论(0)
  • 2020-11-21 07:10

    If the only two kinds of values that could be passed to this function are a string or an array of strings, keep it simple and use a typeof check for the string possibility:

    function someFunc(arg) {
        var arr = (typeof arg == "string") ? [arg] : arg;
    }
    
    0 讨论(0)
提交回复
热议问题