2010-04-15 11 views
8

olarak yerleşik işlev ile çalışmıyor:JavaScript 1.6 Array.map() ve Array.filter() Bu iyi çalışır argümanlar

["655971", "2343", "343"].map(function(x) { return parseInt(x) }) // [655971, 2343, 343] 

Ama bu doesnt:

["655971", "2343", "343"].map(parseInt) // [655971, NaN, NaN] 

aynı yönelik olur Array.filter()

Burada nelerin eksik?

+0

bu durum [MDN'yi 'Array.prototype üzerinde ayrıntılı olarak tarif edilmektedir .map' sayfası] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map#Example:_Tricky_use_case) aşağıdaki blog gönderisi tarafından başvurulanlar: [Allen Wirfs -Brock - Bir JavaScript İsteğe Bağlı Argüman Tehlike] (http://www.wirfs-brock.com/allen/posts/166). –

cevap

20

olduğu varsayılır çünkü İlki işleri sadece dizi öğesi geri arama fonksiyonuna. Şu şekilde olsun:

callback(item, index, array) 
Normalde işleviniz, gerekmediği argümanları göz ardı eder. base index 0 olduğunu ilk çağrı için

parseInt(string, base) 

: Ama parseInt isteğe bağlı ikinci bir parametre kabul eder. Bu, ECMAScript'in base=0'un argümanı atlamakla aynı olduğunu ve sonuç olarak ondalık, sekizli veya onaltılık (bu durumda ondalık kullanarak) izin verdiğini tanımladığından çalışmaktadır.

İkinci ve üçüncü öğeler için base, 1 veya 2'dur. Sayıyı base-1 (var olmayan) veya base-2 (binary) olarak ayrıştırmaya çalışır. Dizede ilk sayı bu temelde bulunmayan bir rakam olduğundan, bir NaN alırsınız. Bir baz olmadan Genelde

, parseInt zaten oldukça şüpheli, yani muhtemelen istiyorum:

kimse ilgileniyor durumda
["655971", "2343", "343"].map(function(x) { return parseInt(x, 10) }) 
+0

Bazı durumlarda (farklı anlamlarda olsa da) bazı durumlarda 'Number' işlevini kullanmaktır. Yeni olmadan çağrıldığında argümanını, teklikli + + operatörüne benzer bir sayıya dönüştürür. –

+0

(Evet ...'Number' veya' + ', bir tam sayı olduğundan emin olmasalar da iyidir.) – bobince

+0

+ nasıl kullanırız? – bucabay

5

sorun map geri üç bağımsız değişkeni, callbackfn(value, index, array) kabul eden bir fonksiyonu olması gerektiği tahmin olmasıdır.

İkinci argüman parseInt(string, radix) işlevinin radix argümanı ile çakışıyor.

Harita her element için böyle parseInt çağırır:

parseInt("655971",0); // 655971 
parseInt("2343", 1); // NaN 
parseInt("343", 2); // NaN 

sayı tabanı tanımsız veya 0 ise, o map fazla bağımsız değişkenler geçirir da ondan 10.

+0

Sizlere hem cevabını verebilirim hem de ilkini seçmek zorundayım. :) – bucabay