Pertanyaan Periksa apakah objek adalah array?


Saya mencoba menulis fungsi yang menerima daftar string, atau string tunggal. Jika itu string, maka saya ingin mengubahnya menjadi array hanya dengan satu item. Kemudian saya bisa mengulangnya tanpa takut ada kesalahan.

Jadi bagaimana cara memeriksa apakah variabel adalah array?


Saya telah mengumpulkan berbagai solusi di bawah ini dan menciptakan sebuah tes jsperf.


2138
2018-01-23 18:53


asal


Jawaban:


Di browser modern yang bisa Anda lakukan

Array.isArray(obj)

(Didukung oleh Chrome 5, Firefox 4.0, IE 9, Opera 10.5, dan Safari 5)

Untuk kompatibilitas ke belakang, Anda dapat menambahkan yang berikut ini

# 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]';
  }
};

Jika Anda menggunakan jQuery yang dapat Anda gunakan jQuery.isArray(obj) atau $.isArray(obj). Jika Anda menggunakan garis bawah Anda dapat menggunakan _.isArray(obj)

Jika Anda tidak perlu mendeteksi larik yang dibuat dalam bingkai berbeda, Anda juga dapat menggunakan instanceof

obj instanceof Array

311
2018-01-06 18:11



Metode yang diberikan dalam standar ECMAScript untuk menemukan kelas Objek adalah menggunakan toString metode dari Object.prototype.

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

Atau Anda bisa menggunakannya typeof untuk menguji apakah itu String:

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

Atau jika Anda tidak peduli dengan kinerja, Anda bisa melakukannya concat ke Array kosong baru.

someVar = [].concat( someVar );

Ada juga konstruktor yang bisa Anda query secara langsung:

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

Lihat a perawatan menyeluruh dari @ T.J. Crowder's blog, seperti yang diposting di komentarnya di bawah ini.

Lihat ini patokan untuk mendapatkan gagasan metode mana yang berkinerja lebih baik: http://jsben.ch/#/QgYAV

Dari @Bharath konversikan string ke array menggunakan Es6 untuk pertanyaan yang ditanyakan:

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

seharusnya:

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



Saya akan memeriksa dulu apakah implementasi Anda mendukung isArray:

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

Anda juga bisa mencoba menggunakan instanceof operator

v instanceof Array

1224
2018-01-23 18:55



jQuery juga menawarkan $.isArray() metode:

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



Ini adalah yang tercepat di antara semua metode (semua browser didukung):

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

84
2017-12-06 10:12



Array.isArray bekerja cepat, tetapi tidak didukung oleh semua versi browser. Jadi Anda bisa membuat pengecualian untuk orang lain dan menggunakan metode universal:

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

31
2017-12-10 17:01



Bayangkan Anda memiliki larik ini di bawah ini:

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

Javascript (peramban baru dan yang lebih lama):

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

atau

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

atau

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

lalu menyebutnya seperti ini:

isArray(arr);

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

Array.isArray(arr);

jQuery:

$.isArray(arr);

Sudut:

angular.isArray(arr);

Underscore dan Lodash:

_.isArray(arr);

28
2017-12-27 13:17



Fungsi sederhana untuk memeriksa ini:

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

20
2017-09-04 17:56



Anda dapat mencoba pendekatan ini: http://web.archive.org/web/20100424091244/http://www.ajaxdr.com/code/javascript-version-of-phps-is_array-function/

EDIT: juga, jika Anda sudah menggunakan JQuery dalam proyek Anda, Anda dapat menggunakan fungsinya $ .isArray ().


16
2018-01-23 18:56



Seperti kata MDN disini:

menggunakan Array.isArray atau Object.prototype.toString.call untuk membedakan   objek reguler dari array

Seperti ini:

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

  • Array.isArray(arr)


13
2017-09-14 21:02