我正在寻找名为Array.window(n)
的数组方法实现,该实现在具有参数n
的数组上调用,将给出连续的重叠数组切片。
示例:
let a = [1, 2, 3, 4, 5, 6]
a.window(2) // [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]
a.window(3) // [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]]
a.window(4) // [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]
a.window(10)// []
我该怎么做?
答案 0 :(得分:1)
这里是使用数组函数的示例稍短一些:
let a = [1, 2, 3, 4, 5, 6];
function windowedSlice(arr, size) {
let result = [];
arr.some((el, i) => {
if (i + size >= arr.length) return true;
result.push(arr.slice(i, i + size));
});
return result;
}
console.log(windowedSlice(a, 2));
console.log(windowedSlice(a, 3));
console.log(windowedSlice(a, 4));
console.log(windowedSlice(a, 5));
答案 1 :(得分:0)
我认为就足够了
settings.py
答案 2 :(得分:0)
这是一个简单的滚动窗口功能。请注意,我们可以根据数组长度减去所需的窗口大小来确定迭代次数。
/**
* Produces a rolling window of desired length {w} on a 1d array.
*
* @param {Array} a The 1d array to window.
* @param {Number} w The desired window size.
* @return {Array} A multi-dimensional array of windowed values.
*/
function rolling(a, w) {
let n = a.length;
let result = [];
if (n < w || w <= 0) {
return result;
}
for (let i = 0; i < n - w + 1; i++) {
result.push(a.slice(i, w + i));
}
return result;
}
let a = [1, 2, 3, 4, 5];
console.log(JSON.stringify(rolling(a, 3)));