【问题标题】:javascript property delete if false nothing if true loopjavascript 属性如果为 false 则删除 如果为 true 则无任何循环
【发布时间】:2016-05-24 05:28:17
【问题描述】:

我需要遍历对象键,如果属性为假,则删除键属性。这是我到目前为止所拥有的,但我无法弄清楚我做错了什么。

function onlyTheTruthy() { 
 onlyTheTruthy.key;
  var prop;

  for (key in onlyTheTruthy){
    if (key != true) {
     delete onlyTheTruthy.key.prop
    }
  else {
       }

  }
  return onlyTheTruthy;

};

【问题讨论】:

  • 首先:在 for...in 循环中,key 永远是一个字符串,并且永远是真实的,其次,你做错了什么取决于你想要达到的目标,即从您的代码中不明显,至少可以说有几个奇怪的地方
  • @muhahmad 分享对象的结构。

标签: javascript loops object for-loop methods


【解决方案1】:

for...in 循环中,使用key 访问对象上的值。这是通过像obj[key] 这样的括号来完成的。

function onlyTheTruthy(obj) {

  for (var key in obj) {
    if (!obj[key]) {
      delete obj[key];
    }
  }

  return obj;
}

【讨论】:

    【解决方案2】:
    function onlyTheTruthy() {
        onlyTheTruthy.key;
        var prop;
        for (key in onlyTheTruthy) {
            if (key != true) {
                delete onlyTheTruthy.key.prop
            } else {}
        }
        return onlyTheTruthy;
    };
    

    这是你的代码。

    行:

    1. 您声明了一个名为onlyTheTruthy 的函数,不带任何参数。不过,我认为应该选择一个:o
    2. 这条线什么也不做。它应该被删除。
    3. 您设置了变量prop 的范围,但没有给它任何值。很好。
    4. for...in 循环。您可能想确切地研究它的作用。 key 变量之前从未见过,除了在第 2 行,但这是一个不同的变量onlyTheTruthy 的属性。此外,您正在循环访问您所在的函数的键:onlyTheTruthy。我相信这不是你想要的。试试:

      for (prop in o) {
      
    5. 检查key 是否不等于真。布尔值不经常用作对象键。也许:

      if (!o[prop]) { // Or, more verbosely:
      if (o[prop] === false) {
      
    6. 查找square brackets ([])。

    7. elseno else 怎么样?你知道,这不是必需的。
    8. } 关闭 for...in 循环。
    9. 返回函数本身。没有。 o 怎么样?或者,如果您最终修改了对象本身,则根本不需要返回。
    10. 函数声明末尾不需要分号。

    编码愉快!

    固定版本:

    function onlyTheTruthy (o) {
        for (var prop in o) {
            if (!o[prop])
                delete o[prop];
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-02-21
      • 2017-11-05
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多