-3
votes

Comment modifier un élément dans un objet à l'aide de JavaScript pour remplacer les caractères spéciaux qui ne sont pas acceptés par FireBase

J'essaie de pousser des statistiques de Kubettes à ma base de données en temps réel en Firebase (pas de Fireestore) et due au caractère spécial "/" dans les touches, Firebase lance une erreur. J'ai essayé de rechercher des problèmes similaires ici, mais ils ne sont pas très similaires à ceux de la mienne (essayé tant de remplacer ou même de supprimer des fonctions mais ne fonctionnaient pas). Voici mes objets:

===== >> L'objet < / p>

Donc, je veux changer le "/" à quelque chose comme "-" sur commande pour pouvoir pousser l'objet entier sur la FireBase.

Exemple: xxx

Veuillez noter que je dois traiter cela dans la capture d'écran d'objet ci-jointe. Donc, je dois traiter ceci: k8snodes {obj} -> [Arr] -> métadonnées {obj} -> Etiquettes {obj} Pour atteindre les touches Je veux remplacer, puis appuyez sur l'objet entier (K8Snodes) sur Firebase.

J'utilise JavaScript / Nodejs . je vous remercie beaucoup.


2 commentaires

Avez-vous essayé .replace () fucntion?


Oui, mais n'a pas fonctionné .. j'ai besoin du code JavaScript complet s'il vous plaît. Comment itération sur le tableau / objet à le faire? Merci.


3 Réponses :


1
votes

Voici comment vous le faites selon votre structure de données.

.ReRuce () code> Référence: Réduire P>

P>

var k8snodes = {
	items: [
  	{
    	"metadata": {
      	"labels": {
        	"beta.kubernetes.io/arch": "amd",
                "beta.kubernetes.io/os": "linux"
        }
      }
    },
    {
    	"metadata": {
      	"labels": {
        	"kubernetes.io/hostname": "centos-master-node",
                "node-role.kubernetes.io/master": "master"
        }
      }
    }
  ]
}



   k8snodes.items.forEach(function(data){
	var newK8snodes = Object.keys(data.metadata.labels).reduce((total,currentValue) => {
            var newLabelKey = currentValue.replace(/\//g,'-')
  	    var newLabel = {[newLabelKey]: data.metadata.labels[currentValue]}     
   
            total = {...total, ...newLabel}      
            return total;
          }, {});  
  
      data.metadata.labels = newK8snodes

    });
console.log(k8snodes);


3 commentaires

Merci Alvin, cela suppose que j'ai une seule chaîne. Dans mon cas, c'est un objet complexe. Comment puis-je boucler pour remplacer cet objet enfant spécifique pour remplacer chaque article? Merci.


@Honshu code mis à jour en fonction de votre structure de données


Impressionnant!! merci @alvin fonctionne bien pour moi. Une seule question de plus si cela ne vous dérange pas, comment puis-je relacer plusieurs caractères spéciaux dans le même code ci-dessus? Firebase n'accepte pas ".", "#", "$", "/", "[" Ou "]" .. "" .. donc dans mon exemple ci-dessus, votre code remplace effectivement le "/" mais j'en ai besoin aussi remplacer le "". .. Merci encore!



0
votes

Une autre solution simple est

p>

var a = 'beta.kubernetes.io/arch';
console.log(a.replace('/','-'))


0 commentaires

0
votes
const ob = {
  'beta.kubernetes.io/arch': 'amd',
  'beta.kubernetes.io/os': 'linux',
  'kubernetes.io/hostname': 'centos',
  'node-role.kubernetes.io/master': 'master'
}
const newOb = {};

for(var i in ob) {
  const newKey = i.replace(/\//g,'-')
  newOb[newKey] = ob[i];
}

console.log(newOb);

1 commentaires

Merci Gaurav, je pense que je suis si proche. Le problème ici est à nouveau que vous avez obtenu un objet simple, alors que dans mon cas, c'est un objet complexe (dans la capture d'écran ci-jointe). Je dois donc traiter ceci: k8snodes {obj} -> Articles [Ar] -> Metadata {obj} -> Labels {obj} Pour atteindre les touches que je veux remplacer, puis appuyez sur l'objet entier (K8Snodes) à Firebase. Merci.