2 votes

Cartographie à travers un tableau interne d'un objet

J'ai cet objet :

let arr = [{  
    id : 1,
    usr : 'pimba',
    xyz: null
  },
  {
    id  : 2,
    usr : 'aloha',
    xyz: {
     xyz_id: 2      
    }    
  },
  {
    id  : 3,
    age : 'pruu',
    xyz: null
  }];

Comme vous pouvez le remarquer, parfois xyz est nulle et parfois elle ne l'est pas.
Je dois reconnaître si elle est nulle ou non, afin de pouvoir la lire.
J'essayais d'utiliser map() mais je ne peux pas définir une sorte de filtre pour n'exécuter la fonction annonyme que lorsqu'elle n'est PAS nulle.

J'ai réussi à faire quelque chose comme ça :

let result = Object.values(arr).map(function(row){
  if(row['xyz'] != null) {
    console.log(row['xyz_id']);
  }
});

Et si je veux un nouveau tableau contenant UNIQUEMENT xyz_id ? Existe-t-il une version plus courte ?

Deuxième cas :

Il y a plus d'une valeur à l'intérieur xyz et ce n'est PAS "nommé".

let arr = [{  
    id : 1,
    usr : 'pimba',
    xyz: null
  },
  {
    id  : 2,
    usr : 'aloha',
    xyz: {
     xyz_id: {"value1Here", "Value2Here"}      
    }    
  },
  {
    id  : 3,
    age : 'pruu',
    xyz: null
  }];

3voto

Vohuman Points 79122

Il semble que vous vouliez mapper le tableau uniquement pour les éléments qui ne sont pas nuls. xyz propriété. Une option consiste à utiliser les deux .filter y .map méthodes. Une autre option est d'utiliser le .reduce méthode :

let result = arr.reduce(function(ret, row) {
   // assuming `xyz` can be only `null` or an object
   if ( row.xyz !== null ) {
     ret.push(row.xyz.xyz_id);
   }
   return ret;
}, []);

2voto

Evan Snapp Points 240

Vous pouvez consulter https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

const notNull = arr.filter(elm => elm.xyz !== null);

1voto

Raymond Points 1166
var a = {one: 1, two: null, three: 3, four: true}
var y = []
let scan = (obj) => { 
  Object.keys(obj).forEach(x => {
    if (obj[x] === null) {
       console.log('Its null')
    } else { 
       // Extend here to datatypes
      y.push(obj[x])
    }
  });
}
scan(a)
console.log(y)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X