删除JSON对象中的密钥,但要保留原始密钥

时间:2019-05-02 23:06:50

标签: javascript arrays json

我正在尝试删除变量a中的键。但是,我仍然想保留原始变量值用于其他目的。但是它总是以某种方式覆盖初始字母。

这是我编写的代码:

this.setState()

输出:

enter image description here

我希望第一个console.log将打印出初始值。

这只是使我感到困惑。我觉得我一定在这里错过了一些知识。感谢任何帮助。谢谢

5 个答案:

答案 0 :(得分:1)

您的问题分为两个部分。首先,console.log前后显示相同的值。发生的是,Chrome的控制台不喜欢跟踪对象等复杂的数据。因此,在关闭控制台的情况下记录变量时,Chrome只会记住该变量。然后,当您打开控制台时,它将读取该变量并将其显示在日志中。但是,如果让控制台保持打开状态并刷新页面,您应该会看到正在打印的正确值。

第二部分,存储对象以供以后使用,需要进行深度克隆。 Here是必须这样做的原因,而here是详细说明如何执行此操作的帖子。

答案 1 :(得分:1)

您的代码正常工作。请参阅here以获取完整答案。您可以通过记录名字而不是整个对象来验证答案。

 let a = [
          { firstName: 'Tony', lastName: 'Stack' },
          { firstName: 'Iron', lastName: 'Man' }
        ];

        console.log('before',a[0].firstName);
        delete a[0].firstName;
        console.log('after',a[0].firstName);

答案 2 :(得分:1)

     let a = [
              { firstName: 'Tony', lastName: 'Stark' },
              { firstName: 'Iron', lastName: 'Man' }
            ];

      let b= {...a} // use spread operator to clone an array

            console.log('before',a);
            delete b[0].firstName;
            console.log('after',b);

答案 3 :(得分:1)

您可以像下面那样使用地图和传播算子

let a = [
          { firstName: 'Tony', lastName: 'Stack' },
          { firstName: 'Iron', lastName: 'Man' }
        ];
        
let removed = a.map(({firstName, ...lastName}) => lastName);

console.log('before:',a)
console.log('after:', removed)

答案 4 :(得分:0)

是控制台输出还是调试窗口?控制台日志应在第一个输出中显示原始信息,并在第二个输出中删除名字

如果要在调试器中查看值,只需在删除元素之前对其进行复制即可。