Vraag Controleer of het object een array is?


Ik probeer een functie te schrijven die een lijst met strings of een enkele string accepteert. Als het een tekenreeks is, wil ik deze omzetten naar een array met alleen dat ene item. Dan kan ik eroverheen lopen zonder bang te zijn voor een fout.

Dus hoe kan ik controleren of de variabele een array is?


Ik heb de verschillende oplossingen hieronder afgerond en een gemaakt jsperf-test.


2138
2018-01-23 18:53


oorsprong


antwoorden:


In moderne browsers kun je dat doen

Array.isArray(obj)

(Gesteund door Chrome 5, Firefox 4.0, IE 9, Opera 10.5 en Safari 5)

Voor achterwaartse compatibiliteit kunt u het volgende toevoegen

# only implement if no native implementation is available
if (typeof Array.isArray === 'undefined') {
  Array.isArray = function(obj) {
    return Object.prototype.toString.call(obj) === '[object Array]';
  }
};

Als u jQuery gebruikt, kunt u gebruiken jQuery.isArray(obj) of $.isArray(obj). Als u een onderstrepingsteken gebruikt, kunt u gebruiken _.isArray(obj)

Als u geen arrays hoeft te detecteren die in verschillende kaders zijn gemaakt, kunt u deze ook gewoon gebruiken instanceof

obj instanceof Array

311
2018-01-06 18:11



De methode die in de ECMAScript-standaard wordt gegeven om de klasse Object te vinden, is het gebruik van de toString methode van Object.prototype.

if( Object.prototype.toString.call( someVar ) === '[object Array]' ) {
    alert( 'Array!' );
}

Of je zou kunnen gebruiken typeof om te testen of het een string is:

if( typeof someVar === 'string' ) {
    someVar = [ someVar ];
}

Of als u zich geen zorgen maakt over prestaties, kunt u gewoon een concat naar een nieuwe lege array.

someVar = [].concat( someVar );

Er is ook een constructor die u rechtstreeks kunt opvragen:

if (somevar.constructor.name == "Array") {
    // do something
}

Bekijk a grondige behandeling van @ T.J.. Crowder blog, zoals gepost in zijn commentaar hieronder.

Kijk hier eens naar criterium om een ​​idee te krijgen welke methode beter presteert: http://jsben.ch/#/QgYAV

Van @Bharath converteer tekenreeks naar array met Es6 voor de gestelde vraag:

const convertStringToArray = (object) => {
   return (typeof object === 'string') ? Array(object) : object 
}

veronderstellen:

let m = 'bla'
let n = ['bla','Meow']
let y = convertStringToArray(m)
let z = convertStringToArray(n)
console.log('check y: '+JSON.stringify(y)) . // check y: ['bla']
console.log('check y: '+JSON.stringify(z)) . // check y: ['bla','Meow']

1865
2018-01-23 18:54



Ik zou eerst controleren of uw implementatie ondersteunt isArray:

if (Array.isArray)
    return Array.isArray(v);

Je zou ook kunnen proberen het te gebruiken instanceof operator

v instanceof Array

1224
2018-01-23 18:55



jQuery biedt ook een $.isArray() methode:

var a = ["A", "AA", "AAA"];

if($.isArray(a)) {
  alert("a is an array!");
} else {
  alert("a is not an array!");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


283
2018-04-02 12:15



Dit is de snelste van alle methoden (alle ondersteunde browsers):

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

84
2017-12-06 10:12



Array.isArray werkt snel, maar wordt niet ondersteund door alle versies van browsers. U kunt dus een uitzondering maken voor anderen en de universele methode gebruiken:

    Utils = {};    
    Utils.isArray = ('isArray' in Array) ? 
        Array.isArray : 
        function (value) {
            return Object.prototype.toString.call(value) === '[object Array]';
        }

31
2017-12-10 17:01



Stel je voor dat je onderstaande array hebt:

var arr = [1,2,3,4,5];

Javascript (nieuwe en oudere browsers):

function isArray(arr) {
  return arr.constructor.toString().indexOf("Array") > -1;
}

of

function isArray(arr) {
  return arr instanceof Array;
}

of

function isArray(arr) {
  return Object.prototype.toString.call(arr) === '[object Array]';
}

noem het dan zo:

isArray(arr);

Javascript (IE9 +, Ch5 +, FF4 +, Saf5 +, Opera10.5 +)

Array.isArray(arr);

jQuery:

$.isArray(arr);

hoekige:

angular.isArray(arr);

Onderstreping en Lodash:

_.isArray(arr);

28
2017-12-27 13:17



Eenvoudige functie om dit te controleren:

function isArray(object)
{
    if (object.constructor === Array) return true;
    else return false;
}

20
2017-09-04 17:56



U kunt deze aanpak proberen: http://web.archive.org/web/20100424091244/http://www.ajaxdr.com/code/javascript-version-of-phps-is_array-function/

BEWERK: ook als u JQuery al in uw project gebruikt, kunt u de functie ervan gebruiken $ .isArray ().


16
2018-01-23 18:56



Zoals MDN zegt hier:

gebruik Array.isArray of Object.prototype.toString.call differentiëren   reguliere objecten van arrays

Soortgelijk:

  • Object.prototype.toString.call(arr) === '[object Array]'of

  • Array.isArray(arr)


13
2017-09-14 21:02



U kunt het type van uw variabele controleren of het een array is met;

var myArray=[];

if(myArray instanceof Array)
{
....
}

12
2018-01-15 08:58