Javascript使用map从一维数组创建一个二维数组
Javascript create a two dimensional array from one dimensional array using map
我有一个数组:
var a = [{name : 'foo1'},{name : 'foo2'},{name : 'foo3'},{name : 'foo4'},{name : 'foo5'}]
如何从如下所示的原始数组输出和数组?
[[{name : 'foo1'},{name : 'foo2'}],[{name : 'foo3'},{name : 'foo4'}],[{name : 'foo5'}]]
使用 Array.prototype.map 函数?谢谢。
使用地图和过滤器的解决方案:
var a = [{name : 'foo1'},{name : 'foo2'},{name : 'foo3'},{name : 'foo4'},{name : 'foo5'}];
var b = a.map(function(val, index, arr){
if (index % 2 === 0){
var pair = [val];
if (arr.length > index+1){
pair.push(arr[index+1]);
}
return pair;
} else {
return null;
}
}).filter(function(val){ return val; });
它将偶数项映射到 2 的数组,将奇数项映射到 null,然后过滤器删除
如果你真的想使用 map
,那么创建一个从 0
到 ceil(length/2)
的范围,并调用 map
为每个元素取 2 个元素(或最后一个元素取 1 或 2 个):
Array.apply(null, Array(Math.ceil(a.length / 2))).map(function (_, i) {return i;}).map(
function(k) {
var item = [a[k*2]];
if (a.length - 1 >= k*2+1)
item.push(a[k*2+1]);
return item;
}
);
具有
Array#forEach()
的解决方案
forEach()
方法为每个数组元素执行一次提供的函数。
var a = [{ name: 'foo1' }, { name: 'foo2' }, { name: 'foo3' }, { name: 'foo4' }, { name: 'foo5' }],
grouped = function (array) {
var r = [];
array.forEach(function (a, i) {
if (i % 2) {
r[r.length - 1].push(a);
} else {
r.push([a]);
}
}, []);
return r;
}(a);
document.write('<pre>' + JSON.stringify(grouped, 0, 4) + '</pre>');
相关文章:
- 作为一个二维数组,从ajax接收
- 将一个二维数组传递给javascript中的函数
- Javascript:一个二维数组的字符串
- 将一个外部二维数组映射到另一个二维数组(javascript)
- Javascript使用map从一维数组创建一个二维数组
- 使用Java.lang.reflect.array.newInstance创建一个带有Java反射的二维数组
- 用Javascript创建一个给定宽度和高度的二维数组
- 用javascript从二维数组中选择一个二维数组
- 设置一个可变长度的二维数组
- 循环通过一个数组创建一个二维数组-循环不工作
- 移动一个二维数组
- 有没有一种方法可以将一个元素从二维数组内部移动到数组中的另一个位置,而不移动其他元素?
- 连接一个二维数组
- 将二维数组中的 ID 与另一个二维数组中的 ID 进行比较
- 如何缩进一个二维数组
- 从常规数组创建一个新的二维数组
- 如何从另一个二维数组中提取一个二维数组区域
- 在javascript中创建一个不同长度的自定义二维数组
- 将二维数组的元素复制到另一个二维数组中
- JavaScript:使用第一个“行”将二维数组转换为对象数组来定义属性