Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中唯一更新数组中的对象时,对象值都在更改_Javascript_Arrays_Object - Fatal编程技术网

在Javascript中唯一更新数组中的对象时,对象值都在更改

在Javascript中唯一更新数组中的对象时,对象值都在更改,javascript,arrays,object,Javascript,Arrays,Object,我目前有一个名为posts的对象数组。 for(var i = 0; i < posts.length; i++){ let post = posts[i] let { item, category } = post let postCollections = categories[category] for(var col in userCollections[category]){ let items = userColl

我目前有一个名为
posts的对象数组。

for(var i = 0; i < posts.length; i++){
      let post = posts[i]
      let { item, category } = post
      let postCollections = categories[category]
      for(var col in userCollections[category]){
        let items = userCollections[category][col].items
        if(items && col){
          postCollections[col]['item'] = item
          console.log("HERE!, item)
          if(item in items){
            postCollections[col]['joined'] = true
          }else{
            postCollections[col]['joined'] = false
          }
        }
      }
      posts[i]['collections'] = postCollections
    }
for(var i=0;i

运行此操作时,将打印“此处!“显示项目值是唯一的。当我打印出
posts
并查看键
项目的值时,它们都显示相同的项目。

这是一个很难解决的问题。结果表明,我设置postCollections的行反复使用相同的对象。像这样复制对象完成了以下操作:

let postCollections = JSON.parse(JSON.stringify(categories[category]));

如果
categories[category]
是一级深度对象或数组,则可以使用
..
扩展语法或slice(slice仅用于数组)。这个问题的原因是因为对象是引用,所以当您更新任何一个元素时,它在所有其他元素上都很明显,因为它们都引用相同的内存位置