可能是重复问题:
将数组拆分为块
我正在尝试将一个值数组转换为新的配对值数组。
例如,我需要将以下内容转换为:
var arr = [1,2,3,4,5,6,7,8];
into:
arr = [[1,2], [3,4], [5,6], [7,8]];
我尝试使用jQuery的.map()方法,但是这个方法对我不起作用:
arr= $.map(arr, function(n, i){
return [n + ',' + n[ i + 1 ]];
});
可能是重复问题:
将数组拆分为块
我正在尝试将一个值数组转换为新的配对值数组。
例如,我需要将以下内容转换为:
var arr = [1,2,3,4,5,6,7,8];
into:
arr = [[1,2], [3,4], [5,6], [7,8]];
arr= $.map(arr, function(n, i){
return [n + ',' + n[ i + 1 ]];
});
如果您坚持要使用map,则可以这样做:
arr= $.map(arr, function(n, i){
if (i%2 === 0) return [[n, arr[ i + 1 ]]];
});
===
与 0
进行比较。而使用 {}
(虽然不是必需的)是编写清晰代码的好方法。 - Roko C. Buljan如果你不想用锤子敲图钉:
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));
}
map
,您需要使用reduce
。
这里有一个能够工作的例子:
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 ) );
}
不要把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
元素数量为偶数时才适用。
另一个例子...
var arr = [1 , 2, 3, 4, 5, 6, 7, 8]
var final = []
while(arr.length) {
final.push(arr.splice(0, 2))
}
splice()
而我在使用 slice()
。干得好。 - Jonathan M
map
函数返回一个数组时,它会将其展平到新的数组中,你可能希望自己手动实现。 - Andrew[...].map
是 JavaScript 中的内置函数(ECMAScript 5 版本),被所有现代浏览器支持,除非你算上那些仍然没有点击 Microsoft 强制推荐升级至 IE9 的人。 - ninjagecko