Disons que j'ai une matrice appelée et j'ai un autre appelé var array2 = [3, 4];
4 Réponses :
J'ai monté une implémentation possible:
p>
// merge 'b' with 'a' at index 'i' function merge(a, b, i=0) { return a.slice(0, i).concat(b, a.slice(i)); } var result = merge([1, 2, 5], [3, 4], 2); console.log(result);
Je pense que cela est en fait le plus élégant, car il effectue le tout dans une ligne et ne modifie pas les matrices d'entrée.
@mbJ Je suis d'accord c'est de la manière facile à lire que tous les autres et utilise moins de code.
Si le but est juste de les commander:
var array1 = [1, 2, 5], array2 = [3, 4]; let combineAt = (n, a, b) => a.reduce((ac, cv, ci) => (n === ci) ? (ac.push(b, cv), ac.flat()) : (ac.push(cv), ac), []); let r = combineAt(2, array1, array2); console.log(r);
@Markmeyer ah, je pense que j'ai édité ce que tu parles de l'époque où j'ai vu ton commentaire :) Ce devrait être une réponse assez solide maintenant.
Vous pouvez essayer Epanding B Code> S éléments dans p> épissure code>
, qui ajoute une série d'arguments à l'index i code> (la suppression des arguments en option est ignorée avec
0 code>).
A code> sera modifié en place et renvoyé.
const merge = (a, b, i=0) => a.splice(i, 0, ...b) && a;
console.log(merge([1, 2, 5], [3, 4], 2));
Cela mutera la matrice se passer dans la fonction, array1 code> sera identique au résultat
code> après la fusion que je pense être fausse.
Je le mentionne dans ma réponse. La question ne fait pas de restriction sur la mutation des paramètres.
Oh oui, je vois que tu l'as mentionné. Même sans restrictions, je pense que c'est une mauvaise pratique de le faire. Pourquoi avez-vous eu la peine de rentrer quelque chose à partir de la fonction code> code> lorsque vous pouvez simplement faire fusion (array1, array2, 2); console.log (array1); code> alors?
OP a répondu à leur propre question et je voulais que ma fonction se comporte comme son exemple, en ligne et travaille avec la chaîne. Oui, les paramètres mutants ne sont pas bonnes pratiques dans tous les cas, mais encore une fois, cela n'a pas été mentionné comme une contrainte pour le problème. Si l'efficacité est la clé et que vous n'échonnez pas la mutation, la voie à suivre est de plop B code> au milieu de
A code>. JS'S'S 'CODE> Array.Sort CODE> est un exemple de fonction en place qui muttaise et renvoie la matrice Arg (il s'agit d'une fonction prototype, oui).
Si vous ne voulez pas muter le tableau d'origine, vous pouvez répandre des tranches dans un nouveau tableau:
p>
var array1 = [1, 2, 5]; var array2 = [3, 4]; function merge(a1, a2, i){ return [...a1.slice(0,i), ...a2, ...a1.slice(i)] } console.log(merge(array1, array2, 2)) // negative indexing too console.log(merge(array1, array2, -2))
Nice utilisation de l'opérateur répandu au lieu de Concat! Celui-ci est mon préféré maintenant! :-)
Définissez «élégant» et s'il vous plaît partagez vos propres tentatives et expliquez comment ces tentatives ont échoué.
@Davidthomas J'ai changé la question à la plus efficace i>, comment est-ce? J'ai également inclus une tentative possible à cela comme une réponse à ma propre question .
L'efficacité est toujours jolie nébuleuse - comment mesurez-vous? La complexité du temps est potentiellement une métrique moins ambiguë mais non sans ses propres problèmes.
Je comprends ça, mais selon qui? Quel moteur / version / mise en œuvre JS, quelles spécifications de la machine, quels cas de test, etc.?
@ggorlen en pensant à cette nouvelle fois, je me rends compte que l'efficacité rendra cela surcpliquée, alors j'ai simplement demandé différentes solutions possibles.
@ZiPzit by 'à l'index 2', je veux dire après l'index numéro 1. Voir Ma solution .