我正在尝试删除变量a中的键。但是,我仍然想保留原始变量值用于其他目的。但是它总是以某种方式覆盖初始字母。
这是我编写的代码:
this.setState()
输出:
我希望第一个console.log将打印出初始值。
这只是使我感到困惑。我觉得我一定在这里错过了一些知识。感谢任何帮助。谢谢
答案 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)
是控制台输出还是调试窗口?控制台日志应在第一个输出中显示原始信息,并在第二个输出中删除名字
如果要在调试器中查看值,只需在删除元素之前对其进行复制即可。