按偏移量对数组进行分组
Group array by offset
我有以下数组
["M", "A", "M", "I", "M", "P"]
这些代表两个人对三个不同问题的回答。我希望能够对索引 [0, 3]、[1, 4] 和 [2, 5] 进行分组。
如果相同的六个回答可能是三个人对两个不同问题的回答。在这种情况下,我希望能够按索引 [0, 2, 4] 和 [1, 3, 5].
对它们进行分组
我在这个项目中使用了 Underscore,所以普通的 JS 或 Underscore 解决方案就可以了!
您可以使用 Array.from()
构建数组,并且在内部您需要两次迭代的索引,因此您可以使用 i + (n * j)
var arr = ["M", "A", "M", "I", "M", "P"]
function group(arr, n) {
var part = Math.ceil(arr.length / n);
return Array.from(Array(n), function(e, i) {
return Array.from(Array(part), function(a, j) {
return arr[i + (n * j)]
})
})
}
console.log(group(arr, 3))
console.log(group(arr, 2))
使用Array#filter
:
const array = ["M", "A", "M", "I", "M", "P"];
const group = (arr, n) => [...Array(n)].map(
(_, i) => arr.filter((_, j) => (j - i) % n === 0)
);
console.log(group(array, 2));
console.log(group(array, 3));
我有以下数组
["M", "A", "M", "I", "M", "P"]
这些代表两个人对三个不同问题的回答。我希望能够对索引 [0, 3]、[1, 4] 和 [2, 5] 进行分组。
如果相同的六个回答可能是三个人对两个不同问题的回答。在这种情况下,我希望能够按索引 [0, 2, 4] 和 [1, 3, 5].
对它们进行分组我在这个项目中使用了 Underscore,所以普通的 JS 或 Underscore 解决方案就可以了!
您可以使用 Array.from()
构建数组,并且在内部您需要两次迭代的索引,因此您可以使用 i + (n * j)
var arr = ["M", "A", "M", "I", "M", "P"]
function group(arr, n) {
var part = Math.ceil(arr.length / n);
return Array.from(Array(n), function(e, i) {
return Array.from(Array(part), function(a, j) {
return arr[i + (n * j)]
})
})
}
console.log(group(arr, 3))
console.log(group(arr, 2))
使用Array#filter
:
const array = ["M", "A", "M", "I", "M", "P"];
const group = (arr, n) => [...Array(n)].map(
(_, i) => arr.filter((_, j) => (j - i) % n === 0)
);
console.log(group(array, 2));
console.log(group(array, 3));