2012-05-04 8 views
7

可能な重複ペアの値の新しい配列を返すために:私は新しい配列に値の配列を変換しようとしています
Split array into chunksJavaScriptは、単一の値の配列から

をペア値。私はそうのようにjQueryの.MAP()メソッドを使用してみましたが、これは私のために動作しませんでした

arr = [[1,2], [3,4], [5,6], [7,8]]; 

arr= $.map(arr, function(n, i){ 
return [n + ',' + n[ i + 1 ]]; 
}); 

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

に:私は変換する必要があります例えば

+3

'map'を持っている場合戻り値として配列が与えられると、それを新しい配列に平らにします。恐らくあなたはそれを自分でやりたいだけです。 – Andrew

+0

また、 '[...]。map'は、IE9へのアップグレードボタンをクリックしていない人を数えない限り、javascript(ECMAScript第5版、現代のすべてのブラウザでサポートされています)のビルトイン関数です。あなたの前を突き出す)。 – ninjagecko

答えて

9

マップを使用するとしたら、次のようにすることができます。

arr= $.map(arr, function(n, i){ 
    if (i%2 === 0) return [[n, arr[ i + 1 ]]]; 
}); 
+0

+1これはいいですね。 P.s:常に '==='を使用して '0'と比較します。また、 '{}'を使うことはクリーンなコードを書くうえで便利です。 –

+1

モジュラスを使用するのはこれを行ううえでクリーンな方法ですが、私は、forループがmap()のようなものであっても、この種のものの方が適切だと認めています。まだ+1。 – adeneo

+0

@ RokoC.Buljanありがとう、演算子を更新しました。 – McGarnagle

6

あなたが画鋲でハンマーを使用しない場合:

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

var newarr = new Array(); 

for (var i=0; i<arr.length; i=i+2) { 
    newarr.push(arr.slice(i,i+2)); 
} 
3

あなたがreduceをしたい、mapを望んでいません。

var endArr = [], 
    arr = [ 1, 2, 3, 4, 5, 6, 7, 8 ], 
    i = 0; 

arr.reduce(function(prev, curr, index) { 
    if (index % 2 === 0) { 
     endArr[ i ] = [ prev, curr ]; 
    } 
    i++; 
}); 

そして私は考えただけで何か他:

var endArr = [], 
    arr = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; 

while (arr.length) { 
    endArr.push(arr.splice(0, 2)); 
} 

編集:ここでは

が動作するはずのものであるArfの、それはChris Gutierrezと同じソリューションです。

3

は、すべての問題のためのjQueryを使用していない:

var arr = [1, 2, 3, 4, 5, 6, 7, 8]; 
var narr = []; 
for (i = 0; i < arr.length; i = i + 2) { 
    narr[i/2] = [arr[i], arr[i + 1]]; 
} 

が、これだけ作品あなたもarr

2

の他の例を数える...

var arr = [1 , 2, 3, 4, 5, 6, 7, 8] 
var final = [] 
while(arr.length) { 
    final.push(arr.splice(0, 2)) 
} 
+0

これはJonathan Mの解決策に似ていることが分かりました –

+1

いいえ、あなたは 'splice()'を使っていて、 'slice()'を使っています。良くやった。 –

関連する問題