遍历对象键仅返回真实值

时间:2019-02-07 02:45:58

标签: javascript arrays object boolean

问题说明:编写一个函数displayOptions,该函数接收对象“ displayDevice”并返回一个数组。输入对象的属性将是“视频输出”选项,每个选项都将具有true或false值。您的函数应该收集所有具有真实值的“视频输出”名称。

我想出了一种使用.filter()方法解决此问题的方法,但是,我对此并不完全了解,而是想尝试使用for..in语句来解决此问题。我能够遍历该对象,但是它返回数组中的所有键,而不仅仅是“ true”键。让我知道我在哪里错了。

我的代码:

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 :(得分:0)

使用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]))

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您的主要问题是,当您发现第一个具有key值的true时,您将在其中返回所有对象键(读取Object.keys()的作用)。您需要创建新的数组并在找到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"];

答案 3 :(得分:0)

仅供以后参考,因为我没有在答复中看到,所以另一个选择可以是class class_1; rand bit[31:0] array; constraint three_ones { $countones(array) == 3; } endclass

reduce