Javascript, l'Objet n'a aucun natif opération de fusion. Si vous avez deux objets, dire
{a:1, b:2}
{c:3, d:4}
Et que vous souhaitez obtenir
{a:1, b:2, c:3, d:4}
Autant que je sache, vous avez pour itérer sur les objets. C'est-à-dire que vous décidez sur une fusion de gauche ou de fusionner droit de la stratégie et ensuite vous faites quelque chose comme (simplifié)
for (key in object2) {
object1[key] = object2[key];
}
C'est très bien. Cependant, Javascript a l' call
et prototype
fonctionnalité. Par exemple, en tournant arguments
en Array
peut être fait avec
Array.prototype.slice.call(arguments)
Cette approche exploite existant en code natif, et donc, par conséquent, est moins sensible à la programmeur folie et doit courir plus vite qu'un non-natif de mise en œuvre.
La question
Est-il une astuce pour utiliser ce prototype/modèle d'appel sur peut-être l' Attribute
ou Node
de la traversée caractéristiques de la DOM, ou peut-être certains des génériques String
fonctions afin d'en faire un objet natif de fusion?
Le code devrait ressembler à quelque chose comme ceci:
var merged = somethingrandom.obscuremethod.call(object1, object2)
Et comme un résultat, vous obtenez un natif de fusion sans une traversée.
Une possible sous-optimale de la solution
Si vous pouviez utiliser le constructor
de la propriété de l' Object
puis de forcer un objet à posséder un constructeur d'un autre objet, puis exécutez new
- dessus de l'objet composite, vous pouvez obtenir une fusion gratuitement. Mais je n'ai pas bien saisi toutes les implications de l' constructor
fonction en javascript pour faire cet appel.
Lemme
La même question vaut pour Arrays
. Un problème commun est d'être, par exemple 7 tableaux de nombres, puis essayer de trouver l'intersection de ces tableaux. C'est-à-dire les nombres qui existent dans tous les 7 tableaux.
Vous pourriez concat ensemble, puis faire un tri, puis une traversée, sûrement. Mais ce serait bien si il y a un générique se croisent niché quelque part que l'on peut contraindre un tableau à faire nativement.
Toutes les pensées?
edit:
Arriver à la moitié du chemin
Pour le tableau de problème, vous pouvez effectuer les opérations suivantes:
tableau.concat(a, b, c).sort().join(':') et puis utiliser certains délicate RegExp
de la capture et de la répétition des motifs, afin de traverser. RegExp implémentations, si vous ne savez pas, fonctionner sur une très simple basée sur la pile de la machine virtuelle. Lorsque vous initialisez votre expression régulière qui est vraiment un programme qui sera compilé (RegExp.la compilation est obsolète méthode JS). Ensuite, le natif de passe sur la chaîne dans un blisteringly rapidement. Peut-être que vous pourriez exploiter que pour les membres de seuils et d'obtenir de meilleures performances...
Il continue à ne pas aller tout le chemin à travers.