Chrome Konsolu'nu kullanarak, bu benim girdi ve çıktı:
[0].map(Array);
[[0, 0, [0]]]; // output
Burada ne oluyor?
DÜZENLE
Bunun beni meraklandırmasının nedeni şudur:
[0].map(String);
Dönecek
["0"];
Ve yok
["0", "0", "String"]
Chrome Konsolu'nu kullanarak, bu benim girdi ve çıktı:
[0].map(Array);
[[0, 0, [0]]]; // output
Burada ne oluyor?
DÜZENLE
Bunun beni meraklandırmasının nedeni şudur:
[0].map(String);
Dönecek
["0"];
Ve yok
["0", "0", "String"]
['10', '10', '10'].map(parseInt)
.map()davranış: stackoverflow.com/questions/14528397/… Genel olarak, .map()birden fazla argüman alan işlevleri kullanırken dikkatli olmalısınız .
[0].map(console.log)
Yanıtlar:
.map()Fonksiyonu çağıran Array()üç parametreyle, bir dizi elemanı değeriyle fonksiyonu 0da, bu elemanın indisi 0ve tüm dizi için bir referans.
Yani bunu yapmak gibi:
var a = [0];
var index = 0
Array(a[index], index, a); // create array with three elements
Ardından döndürülen Array()dizi, .map()oluşturan dizinin ilk öğesi olur , dolayısıyla [[0, 0, [0]]]sonucunuzdaki ekstra iç içe geçme düzeyi olur.
Düzenlemenizle ilişkin DÜZENLEME: derken [0].map(String);o sonuçları String()gibi aynı üç argümanla çağrıldığını String(a[index], index, a), ancak String()buna karşın işlevi, tüm ama ilk argüman yok sayar Array()kullandığı tüm argümanlar sağladı.
İlk olarak , Arraydiziler oluşturmak için bir işlev olarak kullanılabilir:
var arr = Array(1, 2, "Hello");
console.log(arr); // [1, 2, "Hello"]
İkincisi ,map çağrısına üç parametre aktarır: öğe, diziden dizini ve dizinin kendisi.
Dolayısıyla , diziniz bir öğe içerdiğinden, satır:
[0].map(Array);
eşdeğerdir:
[Array(0, 0, [0])]; // the element 0 in the original array will be mapped into Array(0, 0, [0])
Soruyu güncelledikten sonra. Diğer yanıtlar size harita hakkında bilgi verir
Dizi ve dizenin neden farklı olduğunu yanıtlamak için kuruculara bakın
Dize yapıcısı 1 parametreyi kabul eder String (şey) , dizi new Array (element0, element1 [, ... [, elementN]])
.map(Number)Her öğe için bir şey döndürmek yerine her öğeyi bir sayıya dönüştürmenin nedeni aynıdır [3, 2, [4, 1, 3]].
Bu çağrı
[0].map(Array);
şunun gibi bir şey yazmışsınız gibi aynı sonucu verir:
[0].map(function (value, index, array) {
return Array(value, index, array);
})
Harita işlevi, üç parametreli Array işlevini çağırıyor : öğenin değeri, öğe dizini ve tüm dizi. Bu çağrı Arraysize 3 öğeli dizi döndürür: değer (sayı 0), dizin (sayı 0), tüm dizi ( [0]).
Ve bu yeni dizi orijinal Diziye sarılır, çünkü orijinal öğeyi (sayı 0) yeni öğeyle (3 öğeden oluşan dizi) eşlediniz.
Not: Aşağıdaki gibi yalnızca ilk parametreyi kullanmaya alışkın olabilirsiniz.
array.map(function (a) { return a * a; });
veya indeks almak için sadece ikisini kullanın
array.map(function (item, index) { return "index=" + index + ", value=" + item; });
Ancak mapyine de 3 parametre sağladığını hatırlamanız gerekir, sadece geri arama işlevinizde bunları yok sayarsınız. Kodun şöyle olmasının nedeni de budur:
[0].map(String);
İadeler
["0"]
Bunun nedeni, String işlevinin yalnızca ilk parametreyi önemsemesi ve diğer iletilen parametreleri yok saymasıdır. Eğer ararsan
String(11, "Some", "other", "ignored", "parameters")
yine alacaksın
"11"