var aa = [];
var bb = [];
for(var i=0;i<6;i++){
aa.push(i)
//bb do thing
}
// 然后 如上 如果循环长度为6的话 我想让bb变量成这样 bb = [[0,1,2,3,4],[5]] 每单个数组五个满的话就换成下个数组 该如何实现??
var aa = [];
var bb = [];
for(var i=0;i<6;i++){
aa.push(i)
//bb do thing
}
// 然后 如上 如果循环长度为6的话 我想让bb变量成这样 bb = [[0,1,2,3,4],[5]] 每单个数组五个满的话就换成下个数组 该如何实现??
代码来了,虽然是个简单问题,写Functional和写流程图方式还是不一样:
var testData = [
[],
[0],
[0, 1],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
]
var falsify = () => false
var group = (n, x) => x.reduce((p,c,i) =>
falsify((i%n) ? p[p.length-1].push(c) : p.push([c])) || p, [])
testData.forEach(data => console.log(group(5, data)))
如果支持spread operator,容易写成pure/immutable的,但效率会有牺牲,不能用于处理太大的数组:
var group2 = (n, x) => x.reduce((p,c,i) =>
i%n ? [...p.slice(0, -1), [...p.slice(-1)[0], c]] : [...p, [c]], [])
slice
可以拿來切割數組,剛好可以用在這裡
var arr1 = [],
arr2 = []
const times = 6,
perGroup = 5
for(let i = 0 ; i < times ; i++) {
arr1.push(i)
}
for(let i = 0 ; i < arr1.length ; i += perGroup) {
arr2.push(arr1.slice(i, i + perGroup))
}
console.log(arr1)
console.log(arr2)
function arrGen(total) {
var arr = [[]]
for (var i = 0, idx = 0; i < total; i++) {
if (i && !(i % 5)) arr[++idx] = []
arr[idx].push(i)
}
return arr
}
console.log(arrGen(0))
console.log(arrGen(1))
console.log(arrGen(3))
console.log(arrGen(5))
console.log(arrGen(6))
console.log(arrGen(10))
console.log(arrGen(11))
console.log(arrGen(15))
输出:
[ [] ]
[ [ 0 ] ]
[ [ 0, 1, 2 ] ]
[ [ 0, 1, 2, 3, 4 ] ]
[ [ 0, 1, 2, 3, 4 ], [ 5 ] ]
[ [ 0, 1, 2, 3, 4 ], [ 5, 6, 7, 8, 9 ] ]
[ [ 0, 1, 2, 3, 4 ], [ 5, 6, 7, 8, 9 ], [ 10 ] ]
[ [ 0, 1, 2, 3, 4 ], [ 5, 6, 7, 8, 9 ], [ 10, 11, 12, 13, 14 ] ]
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决