当前位置: 首页 > 知识库问答 >
问题:

当我更改find()返回的值时,为什么原始数组会发生变化

魏高邈
2023-03-14
const courses = [
    {'id':101,'name':'Complete Web Dev'},
    {'id':102,'name':'DS and Algo'},
    {'id':103,'name':'React'}
];

let num = courses.find(c=>{
  if(c.id===102)
    return c;
});

num.name="Programming Fundamentals"
console.log(courses);

谁能给我解释一下,当我改变从find函数返回的值时,为什么原始数组中的值会改变呢?是不是有一个我缺失的概念?在执行代码之后,我将得到下面提到的输出。

[
  { id: 101, name: 'Complete Web Dev' },
  { id: 102, name: 'Programming Fundamentals' },
  { id: 103, name: 'React' }
]

共有1个答案

蒋培
2023-03-14

这是因为您引用的是同一个对象。在JavaScript中,只通过值传递基元值。如果您希望它是一个不同的对象,那么您可以复制它。

这样做的一种方法是分散对象并重新分配它。

num = {...num}

请记住,传播对象是一个浅拷贝,这意味着如果您有一个嵌套对象,那么它将不会被复制,而是被引用。

 类似资料:
  • 问题内容: 我有一个简单的Java类,如下所示: 这段代码的输出是这样的: 为什么s不在finally块中覆盖,而是控制打印输出? 问题答案: 在与所述的执行块完成语句和的值在时间语句执行是由该方法返回的值。finally子句稍后s(在语句完成之后)更改值的事实(此时)并未更改返回值。 请注意,以上内容处理的s是对块中自身值的更改,而不是对s引用对象的更改。如果s是对可变对象的引用(String不

  • 问题内容: 用伪代码更好地解释自己。我目前正在学习Java。 如果我有方法 我不能,rs.close()因为我需要在检索它的方法中使用它,因此我将使用它,并且可能“关闭”我创建的新resultSet。 与先前的resultSet会发生什么?是否留给垃圾收集器收集?当我关闭“新” resultSet时,它会自行关闭吗?对代码效率/性能有影响吗? 任何反馈将不胜感激:),因为这让我有些困惑。我认为这更

  • 为什么这里两个列表的大小都是零?按照我的理解,< code>aList1.size()应该是< code>0,而< code>aList2.size()应该是< code>1。

  • 问题内容: 有人可以提供goroutine返回的澄清值。从goroutine返回的值是否已存入抵押。 例如: 我们是否应该避免在go例程中避免返回值? 问题答案: 快速查看一下组装输出显示 该函数确实将其结果存储到堆栈中 因此,当从goroutine调用它时,它会将结果存储到堆栈中。但是,这是一个新的堆栈,当goroutine结束时,该堆栈会被破坏,因此无法获取返回值。 但是,无法检索这些结果。

  • 我在使用Ruby数组时遇到了一些意外的行为: 终端输出: 第一个问题:为什么array1和array2中的项目不同,尽管只在array3上迭代?连接两个数组会返回一个新数组,那么为什么array1和array2会有延迟效应呢? 第二个问题:如何通过迭代来更改array3中的项目,而不更改项目array1或array2? 第三个问题:当使用. map和. each代替. map!时,输出是相同的。所

  • 考虑: 为什么改变的值会改变的值?