J'ai deux tableaux avec une série d'entiers. Je veux simuler la coupe d'un jeu de cartes à plusieurs reprises pour «mélanger le jeu». Je définis une position de coupe et j'attribue tout avant la coupure dans le tableau A au début du tableau B. Je me rends compte que je dois utiliser une découpe pour éviter de créer une référence au tableau A, mais je peux utiliser une découpe des deux côtés de l'équation. c'est-à-dire arrayB.slice(0,3) = arrayA.slice(49,52)
?Réorganisation des tableaux en Javascript
Répondre
Je ne sais pas si des boutures répétées vraiment un remaniement imite, mais peut-être ce n'est pas tout ce que vous faites. Quoi qu'il en soit, après ce que je comprends de votre description, vous voulez:
arrayB = arrayA.splice(49,52).concat(arrayB);
Cela devrait se traduire par une modification arrayB
ayant les pièces qui ont été retirés de arrayA
en face de ce qu'il avait déjà eu lieu.
Si vous ne pas veulent arrayA
modifiées de sorte que ce qui se passe à arrayB
n'est plus en arrayA
, alors vous utilisez Array.prototype.slice()
au lieu de Array.prototype.splice()
.
En utilisant splice()
:
var a = [ 'a1', 'a2', 'a3', 'a4' ];
var b = [ 'b1', 'b2', 'b3', 'b4' ];
b = a.splice(0, 2).concat(b);
// a is now: [ 'a3', 'a4' ]
// b is now: [ 'a1', 'a2', 'b1', 'b2', 'b3', 'b4' ]
Fonctionnant sur les deux tableaux pour que chacune pour recevoir de l'autre:
var a = [ 'a1', 'a2', 'a3', 'a4' ];
var b = [ 'b1', 'b2', 'b3', 'b4' ];
var removedFromA = a.splice(0, 2);
var removedFromB = b.splice(0, 2);
b = removedFromA.concat(b);
a = removedFromB.concat(a);
// a is now: [ 'b1', 'b2', 'a3', 'a4' ]
// b is now: [ 'a1', 'a2', 'b3', 'b4' ]
Dans l'exemple 1 ("Using splice() ..."), comment s'appelle cette syntaxe? J'ai pensé que je devais appeler épissure comme suit: deckA.splice (startIndex, numberToReplace, Element1 ... ElementN); NEVERMIND, je l'ai compris, j'appelle concat sur le tableau retourné par la méthode splice(). Excellent! – Stephen
Merci de m'indiquer dans la bonne direction. J'ai finalement eu recours à ce code: deckB = deckA.splice (0, cutPos); deckB = deckA.concat (deckB); C'est une coupe avec le résultat au deuxième pont. Copiez ensuite B vers A pour la prochaine opération avec: deckA = deckB.slice (0,16); – Stephen
Pas de problème, content que vous ayez quelque chose qui fonctionne comme vous le souhaitez. :) – JAAulde
Cela n'a aucun sens d'affecter quoi que ce soit à une valeur de retour d'une fonction comme dans votre exemple. Essayez de regarder dans la méthode splice, il devrait vous donner ce dont vous avez besoin.
Exemple:
var a = arrayA.splice(0,10); //remove the first 10 elements from arrayA and assign them to a
var b = arrayB.splice(0,10); //see above;
Array.prototype.push.apply(arrayA,b); //add the elements you removed from ArrayB to arrayA
Array.prototype.push.apply(arrayB,a); //see above.
Splice est exactement ce dont j'avais besoin, beaucoup obligé. – Stephen
Cela fonctionne, à coup sûr, et vous avez exactement raison sur le problème d'attribution.Mais j'avais l'impression que @Stephen voulait ce qui était retiré d'un tableau pour aller au devant de l'autre. 'Array.prototype.push()' les met à la fin. – JAAulde
Attendez, non, cela ne fonctionne pas. 'Array.prototype.push()' définit le tableau résultant de l'épissure comme le dernier élément du tableau sur lequel il a été poussé. Donc, vous vous retrouvez avec quelque chose comme '[1, 2, Array []]' Quand je l'ai vu, je pensais que '.push()' devait faire quelque chose de magique que je ne connaissais pas et était légèrement gêné d'avoir suggéré ' .concat() '. Au test, cependant, je vois que '.concat()' était correct. – JAAulde
Je ne suis pas 100% clair de votre question si vous cherchez un bon moyen de mélanger le jeu de cartes, ou si vous voulez plus d'informations sur slice
. Pour cette réponse, je vais supposer le premier.
Il est en fait très facile d'obtenir une chose apparemment simple comme le mélange wrong. (Faux dans le sens où votre approche de brassage peut facilement avoir un biais et rendre certaines combinaisons beaucoup plus communes que d'autres).
Une meilleure façon de mélanger est d'utiliser un algorithme comme le Fisher-Yates Shuffling Algorithm.
Je l'ai fait pour un jeu de cartes que j'ai écrit (en Javascript) et voici le code je:
// this.drawPile is an array of cards
var n = this.drawPile.length;
while (n > 1) {
n--;
var k = Math.floor((n + 1) * Math.random());
var temp = this.drawPile[k];
this.drawPile[k] = this.drawPile[n];
this.drawPile[n] = temp;
}
Mais ne pas couper le pont 100 fois fonctionne encore en théorie puisque, hypothétiquement, un batteur maladroit pourrait faire exactement cela? – Stephen
Excuses, j'ai mal appliqué la définition de «couper le pont». Une coupe maintient la séquence. Je parlais de «shuffle slide» avec des coupes répétées, pas de «riffle» ou de «queue d'aronde». – Stephen
Bien que ce n'est pas tout à fait pertinente si vous souhaitez simuler l'aléatoire complet quand traînant deux côtés les platines, essayent ceci ...
const shuffle = (arr1, arr2) => {
if(!(arr1 instanceof Array) || !(arr2 instanceof Array)) return [];
var ar1 = arr1.length >= arr2.length ? [...arr1] : [...arr2];
var ar2 = arr1.length >= arr2.length ? [...arr2] : [...arr1];
let x = 0;
for(let i = 0; i < ar1.length; i++) {
if(x > ar2.length-1) break;
ar1.splice(Math.floor(Math.random() * (ar1.length+1)), 0, ar2[x]);
x+=1;
}
return ar1;
};
- 1. Réorganisation de tableaux associatifs
- 2. Évaluation des tableaux Javascript
- 3. Javascript - tri des tableaux
- 4. Tableaux en Javascript
- 5. Tri des tableaux imbriqués en JavaScript
- 6. comment faire fonctionner des tableaux en javascript
- 7. Combinant tableaux en Javascript
- 8. tableaux Associatif en javascript
- 9. Tableaux associatifs en Javascript?
- 10. Les tableaux en JavaScript
- 11. Réorganisation des données HTML analysées en Python
- 12. Réorganisation des Treenodes en C# .NET
- 13. Réorganisation des éléments dans BindingList en C#?
- 14. Réorganisation des colonnes jqGrid
- 15. Javascript ne pas tirer après réorganisation Dir
- 16. Réorganisation en mode org
- 17. tableaux associatifs multidimensionnels en JavaScript
- 18. tableaux en javascript pour Stockage javascript
- 19. Réorganisation des lignes dans un fichier
- 20. Besoin de construire des tableaux en Javascript + = ?? obtenir des chaînes
- 21. comment attribuer des valeurs à des tableaux multidimensionnels en javascript?
- 22. SQL Mass Réorganisation des lignes
- 23. Tableau de tableaux en javascript
- 24. tableaux d'objet littéral en javascript
- 25. Combiner deux tableaux en JavaScript
- 26. Réorganisation des données dans R
- 27. CellTable: réorganisation dynamique des lignes
- 28. Javascript combiner des tableaux ou des chaînes
- 29. tableaux javascript
- 30. WPG DataGrid: Réorganisation des lignes?
Je vois la tranche renvoie un nouveau tableau. J'essaye de faire ceci avec seulement deux tableaux, donc je me demande comment je peux copier une tranche d'un tableau dans mon nouveau tableau à une position d'index arbitraire. Cela semble être juste une référence de copie. – Stephen