根据JavaScript对象的键创建一个数组

时间:2019-10-02 19:42:59

标签: javascript arrays object

我需要根据现有常量javascript对象中的某些键选择来创建一个数组

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
}

我需要能够使用值等于EXISTING_CONSTANT_OBJECT的所有键创建一个数组(无需出于不变性而修改10。)

例如,预期输出为

object_to_create_arr = ["fr","us"]

我尝试使用reduce,但失败了。

注意:我可以使用ES6,通常更喜欢它,因为它通常更简洁。

5 个答案:

答案 0 :(得分:8)

您可以使用Object.keysfilter

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

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

console.log(final)

此处+用于隐式转换为数字,因为严格相等的'10'和10不相同

答案 1 :(得分:0)

Object.keys(<object>)将解决问题 顺便说一句:您的对象无效。您缺少一些逗号。

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);

如果您只想获取值为10的键,就像添加.filter

一样简单

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);

答案 2 :(得分:0)

使用<span>使您处在正确的轨道上。如其他答案所述,您也可以使用reduce(实际上可能更好)。

这是使用filter

的解决方案

reduce

答案 3 :(得分:0)

尝试一下

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

答案 4 :(得分:0)

Object.keys()函数返回与您馈给该函数的对象的键对应的值的数组。例如:

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

希望这会有所帮助!