【问题标题】:Changing all key value pairs in an object with a for loop使用 for 循环更改对象中的所有键值对
【发布时间】:2019-06-29 03:56:42
【问题描述】:

我正在使用 React 和 JavaScript。我正在尝试使用具有键值对的现有对象并使键值对的每个值都等于 null。

我尝试使用带有 in 关键字的 for 循环。获取每个键值对并将其更改为null,但出现问题,我不知道如何修复它。

let myObj = {name: 'Bob', lname: 'Johnson'};
for (let x in myObj) {
    myObj.x = null;
}

return myObj;

我希望 myObj 变量使其所有键值对都等于 null。 最终结果:

myObj = {name: null, lname: null};

【问题讨论】:

标签: javascript object for-loop


【解决方案1】:

您可以使用Object.keysforEach 简洁地做到这一点:

const myObj = {name: 'Bob', lname: 'Johnson'};

Object.keys(myObj).forEach(k => myObj[k] = null);

console.log(myObj);

【讨论】:

    【解决方案2】:

    如果你想保持它不可变,你可以简单地创建一个具有相同键的新对象。

    const NullifyValues = obj => {
      return Object.keys(obj).reduce((result, key) => {
        result[key] = null;
        return result;
      }, {})
    }
    
    const test = {
      cat: 1,
      dog: 2,
      bat: 3
    }
    
    const nullified = NullifyValues(test);
    console.log(nullified) // Object { cat: null, dog: null, bat: null }
    

    【讨论】:

    • 你可以在reduce里面做return {...result, [key]: null};
    • 如果你愿意的话当然可以!如果你愿意,你也可以把它做成一个班轮。
    【解决方案3】:

    记得当你这样做

    obj.x = 'some value'
    

    您实际上是在尝试访问对象上名为 x 的属性。

    但是当你这样做时

    obj[x] = 'some value'
    

    Javascript 将尝试解析变量 x 的值并将其用作属性名称。

    现在应该清楚了,您可以在对象的键上运行 forEach 并将每个属性设置为 null。

    Object.keys(myObj).forEach(key => myObj[key] = null)
    

    【讨论】:

      【解决方案4】:

      原版 JS 一行代码:

       Object.keys(myObj).forEach(v => myObj[v] = null)
      

      【讨论】:

      • 很好,这也有效,但我已经使用了别人的答案!
      • 这是正确的方法,由你决定;)
      【解决方案5】:

      更新您的对象以使用bracket notationn 而不是dot notation。这样,您将使用变量 x 而不是文字值“x”

      请参阅下面的工作示例:

      let myObj = {name: 'Bob', lname: 'Johnson'};
      
      for (let x in myObj) {
          myObj[x] = null; // change from myObj.x to myObj[x]
      }
      console.log(myObj);

      【讨论】:

        【解决方案6】:

        您需要通过其名称访问属性,而不是访问对象上的属性x

        let myObj = {name: 'Bob', lname: 'Johnson'}
        
        for (let x in myObj) {
            myObj[x] = null
        }
        
        console.log(myObj)

        【讨论】:

        • 谢谢老兄,这行得通,现在我想起来了,我以前在我的代码中使用过这个,但就是想不起来。再次感谢!
        猜你喜欢
        • 2016-07-27
        • 2021-11-13
        • 2012-08-08
        • 2021-11-03
        • 2020-07-25
        • 1970-01-01
        • 2018-02-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多