1
votes

Supprimer les clés non définies du tableau json

J'ai le tableau JS suivant. Quelle est la meilleure façon de supprimer toutes les lignes avec des clés non définies?

cleanEmptyRows(json){

var i=0;
var row_to_remove=[];

json.forEach(function(element) {
    for (var key in element) {
        if(element[key]==null){
        row_to_remove.push(i);
        break;
        }
    }
    i++;
});


row_to_remove.forEach(function(element){
    var index = json.indexOf(element);
    if (index > -1) {
        json.splice(index, 1);
    }
});

J'ai essayé le code suivant mais ne fonctionne pas. Qu'est-ce que je fais mal?

json=[{email: "1234569@hhh.pt", first: "Joao", last: "Bastos", gender: "Male", phone: "3.51939e+11"},
      {email: "", first: undefined, last: undefined, gender: undefined, phone: undefined}, 
      (...)];


4 commentaires

Veuillez ajouter le javascript que vous utilisez qui ne fonctionne pas.


qu'avez-vous codé?


JSON est une représentation sous forme de chaîne d'un objet JavaScript, pas d'un tableau.


Il n'y a pas de JSON dans cette question. Sans oublier, JSON est une représentation chaîne . Nommer une variable json qui n'est pas une chaîne est assez trompeur. Pas une réponse mais juste une note que vous voudrez peut-être reconsidérer :)


3 Réponses :


5
votes

Solution simple JSON.parse(JSON.stringify(x)),

var t = [{email: "1234569@hhh.pt", first: "Joao", last: "Bastos", gender: "Male", phone: "3.51939e+11"},
      {email: "", first: undefined, last: undefined, gender: undefined, phone: undefined},
      {email: "1234569@hhh.pt", first: "Joao", last: "Bastos", gender: "Male", phone: undefined}];

var resultArray = t.filter((row) => {
    var ignoreValue = Object.values(row).some(elem => elem === undefined);
    return !ignoreValue ? true : false;
});
console.log(resultArray);

Si vous souhaitez supprimer la ligne entière, vous pouvez suivre le code ci-dessous,

var t = [{email: "1234569@hhh.pt", first: "Joao", last: "Bastos", gender: "Male", phone: "3.51939e+11"},
      {email: "", first: undefined, last: undefined, gender: undefined, phone: undefined}];

     
console.log(JSON.parse(JSON.stringify(t)));


2 commentaires

Bonne réponse - plus :)


Simple et efficace, j'aime bien le JSON.parse (JSON.stringify (value)) ! Le plus simple que j'ai vu jusqu'à présent, qui gère également la suppression des valeurs indéfinies à l'intérieur des objets contenus dans des tableaux! Merci :)



0
votes

Un moyen simple consiste à stringifier et à analyser le JSON.

let jsonTest = { foo: 'foo', bar: undefined };
Object.keys(jsonTest).forEach((key) => {

    if (typeof jsonTest[key] == 'undefined') { 

        delete jsonTest[key];
    }
});

Vous pouvez également le faire en supprimant les propriétés non définies. Vous pouvez le rendre récursif si vous n'avez pas d'objet plat.

let jsonTest = { foo: 'foo', bar: undefined };
let allDefined = JSON.parse(JSON.stringify(jsonTest));


0 commentaires

0
votes

Essayez

let json=[{email: "1234569@hhh.pt", first: "Joao", last: "Bastos", gender: "Male", phone: "3.51939e+11"},
      {email: "", first: undefined, last: undefined, gender: undefined, phone: undefined}, 
      ];
      
json.map(x=> Object.keys(x).map(k=> x[k]===undefined ? delete x[k]:0)); 

console.log(json);

json.map(x=> Object.keys(x).map(k=> x[k]===undefined ? delete x[k]:0)); 


0 commentaires