J'ai le tableau: Je veux atteindre: Je pense que je pense que cela ne semble pas ne pas être capable de ne rien planer pour un élément? P> J'ai (Utilisation de sous-traitants): P> [1,2,3,4,5,6,7] code>
[[1,2], [3 , 4], [5,6], [7]] code> P>
arr.map(function(el, idx, arr) {
if (idx%2 != 0) return null;
if (idx == arr.length-1) return [el];
return [el, arr[idx+1]]
}).compact();
6 Réponses :
the mappe code> fonction
peut ' T Faites cela, c'est une transformation de conservation de la structure.
Vous pouvez écrire ce "chunking" en tant que ou p> Réduire code>, une boucle simple, ou quelque chose d'étrange comme p>
return arr.map(function(_, i) {
return arr.slice(i, 2);
}).filter(function(_, i) {
return i%2==0;
})
Essayez une combinaison de carte et filtre
var output = [1,2,3,4,5,6,7].map(function(value,index,arr){ if(index%2==0) { //return [value, arr[index+1]]; return index + 1 < arr.length ? [value, arr[index+1] ] : [ value ]; } else { return false; } }).filter(function(value){return value}); console.log(output);
Donne l'index hors de la liaison :)
@Charlesw. Essayez maintenant
Réduire code> Le tableau à l'aide de l'opérateur MODULO:
function chunk(arr, n) {
return arr.reduce(function (p, c, i) {
if (i % n === 0) p.push([]);
p[p.length - 1].push(c);
return p;
}, []);
}
chunk(arr, 2); // [[1,2],[3,4],[5,6],[7]]
C'est un peu ce que je cherche. Merci
Tu ne peux pas juste faire quelque chose comme ça?
édité pour empêcher la modification d'origine, selon la suggestion de Andy P>
var temp = original.slice(); var newList = []; while(temp.length) { newList.push(temp.splice(0,2)); }
Cela pourrait être mieux qu'il n'a pas détruit le tableau d'origine. Peut-être cloner d'abord avec var caray2 = array.slice (0); code>.
1) Je ne t'ai pas répondu. 2) Je faisais juste une suggestion.
Une solution de plus filaire en une boucle.
p>
function due(array) { return array.length && [array.splice(0, 2)].concat(due(array)) || []; } var array = [1, 2, 3, 4, 5, 6, 7], result = due(array.slice()); document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
Superbe réponse spécialement dû () code>, mais il changera la matrice d'origine. Je suggérerais d'utiliser
array.slice () code> à la place, mais je suppose que la récursion ne fonctionnera pas.
Vous pouvez essayer Aussi à l'aide de la fonction comme p> array.slice () code> et tout en boucle pour cela.
mappe code>,
filtre code> va-t-on tous les éléments. p>
function splitArrayInLength(arr, len) {
var returnArr = [];
var index = 0;
while(index < arr.length){
returnArr.push(arr.slice(index, index + len));
index += len;
}
return returnArr;
}
function main() {
var arr = [1, 2, 3, 4, 5, 6, 7];
print(splitArrayInLength(arr, 2));
print(splitArrayInLength(arr, 4));
}
function print(obj){
document.write("<pre>" + JSON.stringify(obj, 0, 4) + "</pre><br/>");
}
main();
Pouvez-vous partager ce que vous avez essayé jusqu'à présent? Aussi, vous ne pouvez pas éviter les boucles.
array.map code> créera également une boucle. Sa juste approche plus propre.