为了账号安全,请及时绑定邮箱和手机立即绑定

如何执行我的代码以获得想要的结果

如何执行我的代码以获得想要的结果

拉风的咖菲猫 2022-01-07 13:23:46
我创建了一个包含对象的数组数组,我在我的数组上循环,对于包含 y == 5 的对象,我影响对象的布尔变量,然后我通过条件阻止访问,但是我看到下一个数组上的同一个对象受到了同一个布尔变量的影响,并且我的控制台日志显示该影响仅按时执行,如何阻止对下一个数组元素的影响变量?代码  test: function(req, res){    console.log("yesss")    var a = {x:1}    let b = {x:2}    let c = {x:3}    let d = {x:4}    let tab1 = []    a.y = 5    b.y = 10    c.y = 10    d.y = 10    let group1 = [a, c, d]    let group2 = [a, b, d]    tab1.push(group1)    tab1.push(group2)    let test = false    async.each(tab1, function(group, next){        group.forEach(function(elem){            if(elem.y == 5 && !test)            {                console.log("******* executed ******")                test = true                elem.bool = true            }            console.log("elem : ", elem)        })        next()    }, function(){      return res.status(200).json({success: true, data: tab1})    })},这是我的控制台日志控制台日志    ******* executed ******elem :  { x: 1, y: 5, bool: true }elem :  { x: 3, y: 10 }elem :  { x: 4, y: 10 }elem :  { x: 1, y: 5, bool: true }elem :  { x: 2, y: 10 }elem :  { x: 4, y: 10 }JsonReturn{"success": true,"data": [    [        {            "x": 1,            "y": 5,            "bool": true        },        {            "x": 3,            "y": 10        },        {            "x": 4,            "y": 10        }    ],    [        {            "x": 1,            "y": 5,            "bool": true        },        {            "x": 2,            "y": 10        },        {            "x": 4,            "y": 10        }    ]]}
查看完整描述

3 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

对象是通过引用分配的,因此您需要对对象进行深层复制,否则对一个对象所做的更改将不可避免地改变另一个对象。在您的示例中,您可以通过简单地定义一个新变量来保存您想要的数据来避免这种情况。


换句话说,而不是这些行:


var a = {x:1}

let b = {x:2}

let c = {x:3}

let d = {x:4}


let tab1 = []

a.y = 5

b.y = 10

c.y = 10

d.y = 10

let group1 = [a, c, d]


let group2 = [a, b, d]

你可以使用这些行:


let a = {x:1}

let b = {x:2}

let c = {x:3}

let d = {x:4}

let e = {x:5}

let f = {x:6}


let tab1 = []

a.y = 5

b.y = 10

c.y = 10

d.y = 5

e.y = 10

f.y = 10

let group1 = [a, b, c]


let group2 = [d, e, f]

然后你会看到行为如你所愿。我不确定你的代码的目的是什么,但我想你会知道从这里去哪里。


查看完整回答
反对 回复 2022-01-07
?
慕神8447489

TA贡献1780条经验 获得超1个赞

group1andgroup2是引用相同对象的数组,使用JSON.parse()and进行复制JSON.stringify():


let group1 = JSON.parse(JSON.stringify([a, c, d]));


let group2 = JSON.parse(JSON.stringify([a, b, d]));


查看完整回答
反对 回复 2022-01-07
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

我试图制作引用对象的深层副本,它可以工作


let group1 = [Object.assign({}, a), c, d]


    let group2 = [Object.assign({}, a), b, d]


查看完整回答
反对 回复 2022-01-07
  • 3 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信