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.
5 Réponses :
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);
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 >
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)
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
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;
}
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 !!
utilisez la méthode
let arrayOfKeys = Object.keys (yourObject)@RicardoGonzalez pas vraiment, vous n'avez pas entièrement lu la question