de-vraag
  • Pytania
  • Tagi
  • Użytkownicy
Powiadomienia
Nagrody
Rejestracja
Po zarejestrowaniu się, będziesz otrzymywać powiadomienia o odpowiedziach i komentarzach do swoich pytań.
Zaloguj się
Brak tłumaczeń pasujących do Twojego wyszukiwania Jeśli masz już konto, zaloguj się, aby sprawdzić nowe powiadomienia.
Za dodane pytania, odpowiedzi i komentarze przewidziane są nagrody.
Więcej
Źródło
Edytuj
 mpen
mpen
Question

Jak sprawdzić czy obiekt jest tablicą?

Próbuję napisać funkcję, która albo akceptuje listę łańcuchów, albo pojedynczy łańcuch. Jeśli jest to ciąg znaków, to chcę go przekonwertować na tablicę z tylko jednym elementem. Wtedy będę mógł zapętlać się nad nim bez obawy o błąd.

Jak więc sprawdzić, czy zmienna jest tablicą?


I've rounded up różnych rozwiązań poniżej i stworzył jsperf test.

2570 2011-01-23T18:53:04+00:00 3
 mrSaraf
mrSaraf
Edytowane pytanie 11. lutego 2019 в 10:02
Programowanie
arrays
javascript
javascript-objects
To pytanie ma 1 odpowiedź w języku angielskim, aby je przeczytać zaloguj się na swoje konto.
 user113716
user113716
23. stycznia 2011 в 6:54
2011-01-23T18:54:58+00:00
Więcej
Źródło
Edytuj
#11732481

Metodą podaną w standardzie ECMAScript do znalezienia klasy obiektu jest użycie metody toString z Object.prototype.

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

Można też użyć typeof, aby sprawdzić, czy jest to String:

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

Lub jeśli'nie martwisz się o wydajność, możesz po prostu zrobić concat do nowej pustej tablicy.

someVar = [].concat( someVar );

Istnieje również konstruktor, do którego można się bezpośrednio odwoływać:

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

Sprawdź dokładne leczenie z @T.J. Crowder's blog, jak zamieszczono w jego komentarzu poniżej.

Sprawdź ten benchmark, aby zorientować się, która metoda działa lepiej: http://jsben.ch/#/QgYAV

Od @Bharath przekonwertuj ciąg znaków na tablicę za pomocą Es6 dla zadanego pytania:

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

przypuśćmy:

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']
Robert Harvey
Robert Harvey
Edytowana odpowiedź 28. lutego 2018 в 11:30
1919
0
 ChaosPandion
ChaosPandion
23. stycznia 2011 в 6:55
2011-01-23T18:55:46+00:00
Więcej
Źródło
Edytuj
#11732482

Najpierw sprawdziłbym, czy twoja implementacja obsługuje isArray:

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

Możesz również spróbować użyć operatora instanceof.

v instanceof Array
1257
0
Tim Down
Tim Down
23. stycznia 2011 в 7:51
2011-01-23T19:51:12+00:00
Więcej
Źródło
Edytuj
#11732483

Jeśli jedyne dwa rodzaje wartości, które mogą być przekazane do tej funkcji to łańcuch lub tablica łańcuchów, zachowaj prostotę i użyj typeof dla możliwości łańcucha:

function someFunc(arg) {
    var arr = (typeof arg == "string") ? [arg] : arg;
}
4
0
Dodaj pytanie
Kategorie
Wszystkie
Technologia
Kultura / Rekreacja
Życie / Sztuka
Nauka
Profesjonalny
Biznes
Użytkownicy
Wszystkie
Nowy
Popularny
1
365
Zarejestrowany 1 dzień temu
2
True Image
Zarejestrowany 1 dzień temu
3
archana agarwal
Zarejestrowany 3 dni temu
4
Maxim Zhilyaev
Zarejestrowany 6 dni temu
5
adambotsfford adambotsfford
Zarejestrowany 1 tydzień temu
DA
DE
EL
ES
FR
ID
IT
JA
KO
NL
PL
PT
RU
SK
SL
TR
ZH
© de-vraag 2022
Źródło
stackoverflow.com
na podstawie licencji cc by-sa 3.0 z przypisaniem