1
votes

Créer un tableau basé sur les clés d'un objet JavaScript

J'ai besoin de créer un tableau basé sur une sélection de clés à l'intérieur d'un objet javascript constant existant

object_to_create_arr = ["fr","us"]

Je dois être capable de créer un tableau (sans modifier EXISTING_CONSTANT_OBJECT code> pour des raisons d'immuabilité) avec toutes les clés dont la valeur est égale à 10.

Par exemple, la sortie attendue est

const EXISTING_CONSTANT_OBJECT  = {
      'fr': '10',
      'es': '15'
      'us': '10'
      'uk': '7'
      //and so on for many other iso country codes and UNPREDICTABLE key names
}

J'ai essayé d'utiliser réduire mais j'ai échoué.

note: je peux utiliser ES6 et je préfère généralement car il est généralement plus concis.


2 commentaires

utilisez la méthode let arrayOfKeys = Object.keys (yourObject)


@RicardoGonzalez pas vraiment, vous n'avez pas entièrement lu la question


5 Réponses :


0
votes

Object.keys () fera l'affaire BTW: Votre objet n'est pas valide. Il vous manque des virgules.

const EXISTING_CONSTANT_OBJECT = {
  'fr': '10',
  'es': '15',
  'us': '10',
  'uk': '7'
};

const keysWith10 = Object.keys(EXISTING_CONSTANT_OBJECT).filter(k => EXISTING_CONSTANT_OBJECT[k] === '10');
console.log(keysWith10);

Si vous voulez simplement obtenir les clés dont la valeur est 10, c'est aussi simple que d'ajouter .filter

const EXISTING_CONSTANT_OBJECT = {
  'fr': '10',
  'es': '15',
  'us': '10',
  'uk': '7'
  //and so on for many other iso country codes and UNPREDICTABLE key names
};

const keys = Object.keys(EXISTING_CONSTANT_OBJECT);
console.log(keys);


0 commentaires

8
votes

Vous pouvez utiliser Object.keys et filter

const obj = { 'fr': '10','es': '15','us': '10','uk': '7'}

let final = Object.keys(obj).filter(key => +obj[key] === 10)

console.log(final)

Ici + est utilisé pour la conversion implicite en nombre, car en stricte égalité '10' et 10 ne sont pas les mêmes

p >


0 commentaires

0
votes

Vous êtes sur la bonne voie avec réduire . Comme mentionné avec d'autres réponses, vous pouvez également utiliser filter (qui pourrait en fait être mieux).

Voici une solution utilisant reduce

const obj  = {
  'fr': '10',
  'es': '15',
  'us': '10',
  'uk': '7'
}

let result = Object.keys(obj).reduce((acc, curr) => {
  if (parseInt(obj[curr], 10) === 10) {
    acc.push(curr)
  }
  return acc
}, [])

console.log(result)


3 commentaires

Merci j'ai vraiment hésité entre votre solution et @code maniac mais la sienne est plus concise et tout aussi correcte


pas de problème, ils obtiennent tous les deux le même résultat! Je voulais juste montrer comment cela peut être fait avec réduire


Bien sûr, appréciez-le



0
votes

Essayez ceci

function createArr(obj){
    let arr = [];
    for (let key in obj) if (obj.hasOwnProperty(key) && String(obj[key]) === '10') arr.push(key);
    return arr;
}


0 commentaires

0
votes

La fonction

Object.keys () renvoie le tableau de valeurs correspondant aux clés de l'objet que vous alimentez à cette fonction. Par exemple:

let yourObject = { key1: value1, key2: value2, key3:value3}
let arr = Object.keys(yourObject)
console.log(arr) // Output: [ 'key1', 'key2', 'key3']

J'espère que cela vous aidera !!


0 commentaires