Bir nesnenin bir dizi olup olmad─▒─č─▒ nas─▒l kontrol edilir?


Al─▒nan cevaba git


Dizelerin listesini kabul eden bir i┼člev veya tek bir dize yazmaya ├žal─▒┼č─▒yorum. Bu bir dizge ise, onu sadece bir ├Â─čeyle diziye d├Ân├╝┼čt├╝rmek istiyorum. O zaman bir hata korkusu olmadan bunun ├╝stesinden gelebilirim.

Peki de─či┼čkenin bir dizi olup olmad─▒─č─▒n─▒ nas─▒l kontrol ederim?


A┼ča─č─▒daki ├že┼čitli ├ž├Âz├╝mleri toplad─▒m ve bir jsperf testi olu┼čturdum .


2550





2011-01-23




Cevap say─▒s─▒n─▒ say: 30






Modern taray─▒c─▒larda yapabilirsiniz

 Array.isArray(obj)
 

( Taraf─▒ndan desteklenen Chrome 5, Firefox 4.0, IE 9, Opera 10.5 ve Safari 5)

Geriye d├Ân├╝k uyumluluk i├žin a┼ča─č─▒dakileri ekleyebilirsiniz

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

E─čer jQuery kullan─▒yorsan─▒z jQuery.isArray(obj) veya kullanabilirsiniz $.isArray(obj) . Alt ├žizgi kullan─▒yorsan─▒z kullanabilirsiniz. _.isArray(obj)

Farkl─▒ ├žer├ževelerde olu┼čturulan dizileri alg─▒laman─▒za gerek yoksa, sadece instanceof

 obj instanceof Array
 

774







ECMAScript standard─▒nda Nesne s─▒n─▒f─▒n─▒ bulmak i├žin verilen toString y├Ântem , y├Ântemi kullanmakt─▒r Object.prototype .

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

Veya typeof bir String olup olmad─▒─č─▒n─▒ test etmek i├žin kullanabilirsiniz :

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

Ya da performans konusunda endi┼če duymuyorsan─▒z, sadece concat yeni bir bo┼č Dizi yapabilirsiniz.

 someVar = [].concat( someVar );
 

Do─črudan sorgulayabilece─činiz bir de yap─▒c─▒ var:

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

Bir g├Âz at─▒n kapsaml─▒ tedavi dan @TJ Crowder'─▒n a┼ča─č─▒da onun yorumunda yay─▒nlanm─▒┼čt─▒r olarak, blog.

Hangi y├Ântemin daha iyi performans g├Âsterdi─čine dair bir fikir edinmek i├žin bu kritere g├Âz at─▒n : http://jsben.ch/#/QgYAV

G├Ânderen @Bharath soru soruldu─čunda i├žin ES6 kullanarak diziye d├Ân├╝┼čt├╝rme dizesi:

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

varsayal─▒m:

 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']
 

1916







─░lk ├Ânce uygulaman─▒z─▒n desteklenip desteklenmedi─čini kontrol edece─čim isArray :

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

instanceof Operat├Âr├╝ kullanmay─▒ da deneyebilirsiniz

 v instanceof Array
 

1254







jQuery ayr─▒ca bir $.isArray() y├Ântem sunar :

 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> 


293


2012-04-02





Bu, t├╝m y├Ântemler aras─▒nda en h─▒zl─▒s─▒d─▒r (t├╝m taray─▒c─▒lar desteklenir):

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

101







Bu dizinin a┼ča─č─▒da oldu─čunu hayal edin :

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

Javascript (yeni ve eski taray─▒c─▒lar):

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

veya

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

veya

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

o zaman ┼č├Âyle ├ža─č─▒r:

 isArray(arr);
 

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

 Array.isArray(arr);
 

jQuery:

 $.isArray(arr);
 

A├ž─▒sal:

 angular.isArray(arr);
 

Alt ├žizgi ve Lodash:

 _.isArray(arr);
 

43







Array.isArray h─▒zl─▒ ├žal─▒┼č─▒yor, ancak taray─▒c─▒lar─▒n t├╝m s├╝r├╝mleri taraf─▒ndan desteklenmiyor. B├Âylece ba┼čkalar─▒ i├žin bir istisna yapabilir ve evrensel y├Ântemi kullanabilirsiniz:

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

32







Bunu kontrol etmek i├žin basit bir fonksiyon:

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

22







MDN'nin dedi─či gibi :

normal nesneleri dizilerden ay─▒rmak i├žin Array.isArray veya Object.prototype.toString.call ├Â─česini kullan─▒n.

Bunun gibi:

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

  • Array.isArray(arr)


15







Bu soru i├žin tek bir hat ├ž├Âz├╝m├╝ var

 x instanceof Array
 

burada x de─či┼čkeni, e─čer x bir dizi ise true, de─čilse ise false d├Ând├╝r├╝r.


15







De─či┼čkeninizin t├╝r├╝n├╝ bir dizi olup olmad─▒─č─▒n─▒ kontrol edebilirsiniz;

 var myArray=[];

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

13







U─čra┼čt─▒─č─▒n─▒z nesne t├╝r├╝n├╝ test etmek i├žin bir i┼člev yapard─▒m ...

 function whatAmI(me){ return Object.prototype.toString.call(me).split(/\W/)[2]; }

// tests
console.log(
  whatAmI(["aiming","@"]),
  whatAmI({living:4,breathing:4}),
  whatAmI(function(ing){ return ing+" to the global window" }),
  whatAmI("going to do with you?")
);

// output: Array Object Function String 

sonra basit bir if ifadesi yazabilirsiniz ...

 if(whatAmI(myVar) === "Array"){
    // do array stuff
} else { // could also check `if(whatAmI(myVar) === "String")` here to be sure
    // do string stuff
}
 

13







Bunu ├žok basit bir ┼čekilde yap─▒yorum. Benim i├žin ├žal─▒┼č─▒yor. Herhangi bir sak─▒nca var m─▒?

 Array.prototype.isArray = true;

a=[]; b={};
a.isArray  // true
b.isArray  // (undefined -> false)
 

11







Bu, yorumlar─▒ dikkate alarak bu cevab─▒ geli┼čtirme ├žabam:

 var isArray = myArray && myArray.constructor === Array;
 

─░f / else'den kurtulur ve dizinin null veya undefined olma ihtimalini a├ž─▒klar


11







https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/isArray

 Array.isArray = Array.isArray || function (vArg) {
    return Object.prototype.toString.call(vArg) === "[object Array]";
};
 

10







Jsperf keman─▒n─▒ hata kontrol├╝n├╝n yan─▒ s─▒ra iki alternatif y├Ântemle g├╝ncelledik .

'Nesne' ve 'Dizi' prototiplerinde sabit bir de─čer tan─▒mlayan y├Ântemin, di─čer y├Ântemlerden daha h─▒zl─▒ oldu─ču ortaya ├ž─▒kt─▒. Bu biraz ┼ča┼č─▒rt─▒c─▒ bir sonu├žtur.

 /* Initialisation */
Object.prototype.isArray = function() {
  return false;
};
Array.prototype.isArray = function() {
  return true;
};
Object.prototype._isArray = false;
Array.prototype._isArray = true;

var arr = ["1", "2"];
var noarr = "1";

/* Method 1 (function) */
if (arr.isArray()) document.write("arr is an array according to function<br/>");
if (!noarr.isArray()) document.write("noarr is not an array according to function<br/>");
/* Method 2 (value) - **** FASTEST ***** */
if (arr._isArray) document.write("arr is an array according to member value<br/>");
if (!noarr._isArray) document.write("noarr is not an array according to member value<br/>"); 

De─či┼čken tan─▒ms─▒z de─čeri al─▒rsa bu iki y├Ântem i┼če yaramaz, ancak bir de─čere sahip olduklar─▒ndan eminseniz ├žal─▒┼č─▒r. Bir de─čerin bir dizi mi yoksa tek bir de─čer mi oldu─čunu g├Âz ├Ân├╝nde bulundurarak performans─▒ kontrol etmekle ilgili olarak, ikinci y├Ântem ge├žerli bir h─▒zl─▒ y├Ânteme benzemektedir. Chrome'daki 'instanceof' ├Â─česinden biraz daha h─▒zl─▒d─▒r, Internet Explorer, Opera ve Safari'deki (makinemdeki) en iyi ikinci y├Ântemden iki kat daha h─▒zl─▒d─▒r.


10







─░nsanlar─▒n bir t├╝r javascript yakla┼č─▒m─▒ arad─▒klar─▒n─▒ biliyorum. Ancak daha az d├╝┼č├╝nmek istiyorsan─▒z, buraya bir g├Âz at─▒n: http://underscorejs.org/#isArray

 _.isArray(object) 
 

Nesne bir Array ise true de─čerini d├Ând├╝r├╝r.

 (function(){ return _.isArray(arguments); })();
=> false
_.isArray([1,2,3]);
=> true
 

9







G├Ârd├╝─č├╝m en iyi ├ž├Âz├╝m, typeof i├žin bir taray─▒c─▒ de─či┼čtirme. Angus Croll'un ├ž├Âz├╝m├╝n├╝ buradan kontrol edin .

TL; DR s├╝r├╝m├╝ a┼ča─č─▒dad─▒r, ancak makale, konuyla ilgili harika bir tart─▒┼čmad─▒r, dolay─▒s─▒yla vaktiniz varsa okumal─▒s─▒n─▒z.

 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 */};
 

5







─░┼čte benim tembel yakla┼č─▒m─▒m:

 if (Array.prototype.array_ === undefined) {
  Array.prototype.array_ = true;
}

// ...

var test = [],
    wat = {};

console.log(test.array_ === true); // true
console.log(wat.array_ === true);  // false
 

Prototipi ÔÇťkar─▒┼čt─▒rman─▒nÔÇŁ sakrilej oldu─čunu biliyorum, ancak ├Ânerilen toString y├Ântemden daha iyi bir performans g├Âsterdi─či g├Âr├╝l├╝yor .

Not: Bu yakla┼č─▒m─▒n bir yetersizli─či, s─▒n─▒rlar aras─▒nda i┼če yaramayaca─č─▒ iframe , ancak benim kullan─▒m─▒m i├žin bu bir sorun de─čil.


5







Stoyan Stefanov'un t├╝m olas─▒ sorunlar─▒ ele alman─▒n yan─▒ s─▒ra ECMAScript 5 y├Ântemi Array.isArray () kullanmas─▒ gerekti─čini d├╝┼č├╝nen JavaScript Patterns adl─▒ kitab─▒nda da g├╝zel bir ├Ârnek var .https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray

─░┼čte burada:

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

Bu arada, e─čer jQuery kullan─▒yorsan─▒z, bu y├Ântemi $ .isArray () kullanabilirsiniz.


5







Bir Nesnenin Dizi olup olmad─▒─č─▒n─▒ kontrol etmenin en kolay ve en h─▒zl─▒ yolu.

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

veya

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

veya bir yard─▒mc─▒ program i┼člevi yapabilirsiniz:

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

kullan─▒m─▒:

 isArray(arr); //return true
 

5







Nesnenizin bir concat y├Ântemi olmad─▒─č─▒n─▒ biliyorsan─▒z, a┼ča─č─▒dakiler kullan─▒labilir.

 var arr = [];
if (typeof arr.concat === 'function') {
    console.log("It's an array");
} 


5







─░sArray y├Ântemi olabilir, ancak kontrol etmeyi tercih ederim

Object.getPrototypeOf(yourvariable) === Array.prototype


5







Bu i┼čleve iletilebilecek yaln─▒zca iki t├╝r de─čer bir dize veya bir dize dizisiyse, basit tutun typeof ve dize olas─▒l─▒─č─▒ i├žin bir denetim kullan─▒n :

 function someFunc(arg) {
    var arr = (typeof arg == "string") ? [arg] : arg;
}
 

4







 A = [1,2,3]
console.log(A.map==[].map)
 

Burada en k─▒sa s├╝r├╝m aray─▒┼č─▒nda ┼čimdiye kadar ne var.

Dikkat edin, t├╝m olas─▒ kombinasyonlar─▒ her zaman alg─▒layacak m├╝kemmel bir i┼člev yoktur. Aletlerin yeteneklerini ve s─▒n─▒rlar─▒n─▒ bilmek, sihirli bir alet beklemekten daha iyidir.


4







 function isArray(value) {
    if (value) {
        if (typeof value === 'object') {
            return (Object.prototype.toString.call(value) == '[object Array]')
        }
    }
    return false;
}

var ar = ["ff","tt"]
alert(isArray(ar))
 

4







Bir giri┼č de─čeri bir dizi ise test etmek i├žin basit bir fonksiyon ┼čudur:

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

Bu, taray─▒c─▒ aras─▒nda ve daha eski taray─▒c─▒larda ├žal─▒┼č─▒r. Bu TJ Crowders'─▒n blog yaz─▒s─▒ndan ├žekildi


4







Bunu deneyebilirsiniz:

 var arr = []; (or) arr = new Array();
var obj = {}; (or) arr = new Object();

arr.constructor.prototype.hasOwnProperty('push') //true

obj.constructor.prototype.hasOwnProperty('push') // false
 

4







Bu i┼člev hemen hemen her ┼čeyi diziye ├ževirir:

 function arr(x) {
    if(x === null || x === undefined) {
        return [];
    }
    if(Array.isArray(x)) {
        return x;
    }
    if(isString(x) || isNumber(x)) {
        return [x];
    }
    if(x[Symbol.iterator] !== undefined || x.length !== undefined) {
        return Array.from(x);
    }
    return [x];
}

function isString(x) {
    return Object.prototype.toString.call(x) === "[object String]"
}

function isNumber(x) {
    return Object.prototype.toString.call(x) === "[object Number]"
}
 

Daha yeni baz─▒ taray─▒c─▒ ├Âzellikleri kulland─▒─č─▒ndan maksimum destek i├žin bunu doldurmak isteyebilirsiniz.

├ľrnekler:

 > arr(null);
[]
> arr(undefined)
[]
> arr(3.14)
[ 3.14 ]
> arr(1/0)
[ Infinity ]
> gen = function*() { yield 1; yield 2; yield 3; }
[Function: gen]
> arr(gen())
[ 1, 2, 3 ]
> arr([4,5,6])
[ 4, 5, 6 ]
> arr("foo")
[ 'foo' ]
 

NB dizeleri, karakter dizisi yerine, tek bir ├Â─čeli diziye d├Ân├╝┼čt├╝r├╝l├╝r. isString Etraf─▒nda ba┼čka bir yol tercih ediyorsan─▒z ├žekinizi silin .

Array.isArray Burada kulland─▒m ├ž├╝nk├╝ en sa─člam ve ayn─▒ zamanda en basit olan─▒.


4


2016-10-24





Sizin durumunuzda , tek bir nesneyi ve ayn─▒ zamanda diziyi (ve hatta birle┼čtirilen) kabul edebilen Array concat y├Ântemini kullanabilirsiniz :https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/concat

 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 En eski Array y├Ântemlerinden biri gibi g├Âr├╝n├╝yor (IE 5.5 bile bunu iyi biliyor).


4



─░lgili yay─▒nlar


Bir eleman─▒n bir dizide olup olmad─▒─č─▒n─▒ kontrol etme

Bir nesnenin bir liste veya dize olup olmad─▒─č─▒ nas─▒l kontrol edilir (dize de─čil)?

Bir nesnenin null olup olmad─▒─č─▒ nas─▒l kontrol edilir?

Bir nesnenin python'da bir jenerat├Âr nesnesi olup olmad─▒─č─▒ nas─▒l kontrol edilir?

Bir nesnenin koleksiyonda olup olmad─▒─č─▒n─▒ kontrol etmek i├žin include y├Ântemini lodash'da nas─▒l kullan─▒r─▒m?

Bir nesnenin aray├╝z uygulay─▒p uygulamad─▒─č─▒n─▒ nas─▒l kontrol edebilirim? [├žift]

Bir nesnenin C# ile serile┼čtirilebilir olup olmad─▒─č─▒n─▒ kontrol etme

Bir nesnenin yans─▒ma kullanmadan bir dizi olup olmad─▒─č─▒n─▒ nas─▒l g├Ârebilirim?

Bir nesnenin belirli bir t├╝r olup olmad─▒─č─▒n─▒ kontrol etme

Entity Framework'te bir nesnenin zaten bir veri ba─člam─▒na eklenip eklenmedi─čini kontrol etmek m├╝mk├╝n m├╝d├╝r?

Etiketle ilgili di─čer sorular [javascript]


Tarih saatini veya zaman damgas─▒ veri t├╝r├╝n├╝ MySQL'de kullanmal─▒ m─▒y─▒m?

Windows komut sat─▒r─▒nda 'hangisi' e┼čde─čeri var m─▒?

Kodun i├žinde bulundu─ču montaj─▒n yolunu nas─▒l bulurum?

Java 9'da java.lang.NoClassDefFoundError nas─▒l ├ž├Âz├╝l├╝r: javax / xml / bind / JAXBException, Java 9

Request () ve library () aras─▒ndaki fark nedir?

Git Bash'in 'git diff' sonu├žlar─▒ndan pencerelerde nas─▒l ├ž─▒kar─▒m? [├žift]

Unwind segue programl─▒ olarak nas─▒l yap─▒l─▒r?

CSS eklemenin en iyi yolu? Neden @portport kullanmal─▒y─▒m?

Daha h─▒zl─▒, MySQL'de DISTINCT veya GROUP BY SELECT?

Sat─▒r sonlar─▒n─▒ git filtre dal─▒yla sabitlemeye ├žal─▒┼č─▒yor, ancak ┼čans─▒ yok