Создать массив на основе ключей объекта JavaScript - PullRequest
1 голос
/ 02 октября 2019

Мне нужно создать массив на основе некоторого выбора ключей в существующем постоянном объекте 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 и обычно предпочитаю, поскольку он обычно более лаконичен.

Ответы [ 4 ]

8 голосов
/ 02 октября 2019

Вы можете использовать Object.keys и filter

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 не совпадают

0 голосов
/ 02 октября 2019

Object.keys() функция возвращает массив значений, соответствующих ключам объекта, который вы передаете этой функции. Например:

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

Надеюсь, это поможет !!

0 голосов
/ 02 октября 2019

Вы на правильном пути с reduce. Как уже упоминалось в других ответах, вы также можете использовать filter (что на самом деле может быть лучше).

Вот решение с использованием 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)
0 голосов
/ 02 октября 2019

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...