Перебирайте ключи объекта, чтобы вернуть только истинное значение - PullRequest
0 голосов
/ 07 февраля 2019

Инструкции по решению проблемы: напишите функцию displayOptions, которая получает объект "displayDevice" и возвращает массив.Свойства входного объекта будут опциями «вывода видео», каждый из которых будет иметь значение true или false.Ваша функция должна собирать все имена «видеовыхода», которые имеют истинные значения.

Я нашел способ решить эту проблему с помощью метода .filter (), однако я не до конца понял это и хотелчтобы попытаться сделать это с помощью оператора for..in.Я могу перебирать объект, но он возвращает все ключи в массиве, а не только «истинные».Дайте мне знать, где я ошибся здесь.

Мой код:

function displayOptions(displayDevice) {
  for(var key in displayDevice) {
    if(displayDevice[key] === true) {
      return Object.keys(displayDevice);
    }
  }
}

var televisionA = {
  VGA: false,
  HDMI1: true,
  HDMI2: true
}
var monitor001 = {
  VGA: true,
  DVI: false,
  HDMI1: true,
  HDMI2: true
}
var monitor002 = {
  HDMI1: true,
  HDMI2: true,
  DVI: true
}

displayOptions(televisionA); //["HDMI1", "HDMI2"];
displayOptions(monitor001); //["VGA", "HDMI1", "HDMI2"];

Ответы [ 4 ]

0 голосов
/ 08 февраля 2019

Просто для дальнейшего использования, так как я не видел в ответах, другой альтернативой может быть reduce:

const displayOptions = displayDevice =>
  Object.entries(displayDevice)
    .reduce((acc, [key, val]) => (val && acc.push(key), acc),[]);
0 голосов
/ 07 февраля 2019

Проще filter:

function displayOptions(displayDevice) {
  return Object.entries(displayDevice).filter(([, bool]) => bool).map(e => e[0]);
}

var televisionA = {
  VGA: false,
  HDMI1: true,
  HDMI2: true
}
var monitor001 = {
  VGA: true,
  DVI: false,
  HDMI1: true,
  HDMI2: true
}
var monitor002 = {
  HDMI1: true,
  HDMI2: true,
  DVI: true
}

console.log(displayOptions(televisionA));
console.log(displayOptions(monitor001));
0 голосов
/ 07 февраля 2019

Ваша основная проблема в том, что вы возвращаете все ключи объектов (прочитайте, что делает Object.keys () ), когда вы нашли первое key со значением true.Вам нужно создать новый массив и нажать на него при обнаружении true.

function displayOptions(displayDevice)
{
    let newObj = [];

    for (var key in displayDevice)
    {
        if (displayDevice[key] === true) // or just if (displayDevice[key])
            newObj.push(key);
    }

    return newObj;
}

var televisionA = {
  VGA: false,
  HDMI1: true,
  HDMI2: true
}
var monitor001 = {
  VGA: true,
  DVI: false,
  HDMI1: true,
  HDMI2: true
}
var monitor002 = {
  HDMI1: true,
  HDMI2: true,
  DVI: true
}

console.log(displayOptions(televisionA)); //["HDMI1", "HDMI2"];
console.log(displayOptions(monitor001)); //["VGA", "HDMI1", "HDMI2"];
0 голосов
/ 07 февраля 2019

Используйте Object.keys, чтобы получить ключи и отфильтровать их согласно true / false

var televisionA = {
  VGA: false,
  HDMI1: true,
  HDMI2: true
}
var monitor001 = {
  VGA: true,
  DVI: false,
  HDMI1: true,
  HDMI2: true
}
var monitor002 = {
  HDMI1: true,
  HDMI2: true,
  DVI: true
}
console.log(Object.keys(televisionA).filter((e)=>televisionA[e]))
console.log(Object.keys(monitor001).filter((e)=>monitor001[e]))
console.log(Object.keys(monitor002).filter((e)=>monitor002[e]))
...