В питоне это может быть сделано с zip(*[iter(xs)]*n)
. Просто для удовольствия, вот реализация JS:
Начнет с генератором бедного человека (это все, что мы не получили до ES6 спредов вокруг):
StopIteration = {"name": "StopIteration"}
function iter(xs) {
if('next' in xs)
return xs;
var i = 0;
return {
next: function() {
if(i >= xs.length)
throw StopIteration;
return xs[i++];
}
}
}
next = function(it) { return it.next() }
zip()
тривиальна:
zip = function() {
var args = [].map.call(arguments, iter), chunks = [];
while(1) {
try {
chunks.push(args.map(next));
} catch(StopIteration) {
return chunks;
}
}
}
Теперь, чтобы создать сцепленные пары просто пройти один и тот же ITER дважды zip:
xs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
it = iter(xs)
a = zip(it, it)
console.log(a)
// [[1,2],[3,4],[5,6],[7,8],[9,10],[11,12]]
для N -пар требуется дополнительная утилита:
repeat = function(x, n) {
for(var a = []; n; n--)
a.push(x);
return a;
}
a = zip.apply(this, repeat(iter(xs), 5))
console.log(a)
// [[1,2,3,4,5],[6,7,8,9,10]]
Обратите внимание, что нравится в Python это полоски неполные куски.
Что вы пробовали? Где у вас проблемы? Что вы не понимаете, чтобы добиться этого? –
просто напишите код 'javascript' для этого, выполните некоторую итерацию. – sabithpocker
По сути, я не понимаю, как написать это - вот почему я задаю вопрос? – Andy