javascript - 在 JavaScript 中克隆变量不起作用

标签 javascript

我有一个数组字典,如下:

var usersTemp = {11: [ {"active": true, "email": "seconduser@example.com", "userid": 2, } ],
            12:  [ {"active": true, "email": "firstuser@example.com", "userid": 1, },
                   {"active": true, "email": "seconduser@example.com", "userid": 2, } ], }

我需要合并具有相同电子邮件地址或用户 ID 的元素,并得到与此类似的内容:

{ 1: {"active": true, "email": "firstuser@example.com", "roles": [12]} ,
  2: {"active": true, "email": "seconduser@example.com", "roles": [11 , 12]}, }

这是我的尝试:

var mergedUsersTemp = {};
for (var role in usersTemp) {
    for (var user in usersTemp[role]) {
        if(!mergedUsersTemp[user]){
            const i = JSON.parse(JSON.stringify(usersTemp[role][user]));
            console.log(JSON.stringify(i))
            mergedUsersTemp[user] = {"active": i["active"], "email": i["email"], "id": i["id"], "roles": []};
            mergedUsersTemp[user]["roles"] = [];
        }
        mergedUsersTemp[user]["roles"].push(role);
    }
}

但问题是 JavaScript 中的深度复制,它为用户信息返回相同的值。我该如何修复它?

最佳答案

使用 Object.keys()forEach 循环代替 for...in 循环更容易。然后,您只需首先检查对象中是否已存在 userid 并设置其值或添加到 Angular 色并更改为事件状态。

var usersTemp = {
  11: [{
    "active": true,
    "email": "seconduser@example.com",
    "userid": 2,
  }],
  12: [{
    "active": true,
    "email": "firstuser@example.com",
    "userid": 1,
  }, {
    "active": true,
    "email": "seconduser@example.com",
    "userid": 2,
  }],
}

var result = {}
Object.keys(usersTemp).forEach(function(i) {
  usersTemp[i].forEach(function(j) {
    if (!result[j.userid]) {
      result[j.userid] = {
        active: j.active,
        email: j.email,
        roles: []
      }
    }
    result[j.userid].roles.push(i)
    result[j.userid].active = j.active
  })
})

console.log(result)

关于javascript - 在 JavaScript 中克隆变量不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42722684/

相关文章:

javascript - 如何使用导入/导出 ES6 表示法来转换导出的 require 语句?

javascript - apply 在这里做什么?

javascript - 将 Javascript 变量添加到 asp-route-data 中

javascript - 在循环数组时发出 json 请求和存储值的正确方法是什么?

javascript - Internet Explorer 11 不提交 HTTPOnly Cookie

javascript - 您应该在异步函数中等待返回值吗?

javascript - $state.go 无法在 Internet Explorer 中运行

javascript - 如何正确地将 javascript 文件包含到 html 中

javascript - 如何禁用提交按钮,直到在特定字段中通过验证

javascript - 通过限制 Google V8 中的 Javascript 支持来创建更简单的、特定领域的语言?