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

我创建了一个包含对象的数组数组,


我在我的数组上循环,对于包含 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

        }

    ]

]

}


拉风的咖菲猫
浏览 127回答 3
3回答

慕哥6287543

对象是通过引用分配的,因此您需要对对象进行深层复制,否则对一个对象所做的更改将不可避免地改变另一个对象。在您的示例中,您可以通过简单地定义一个新变量来保存您想要的数据来避免这种情况。换句话说,而不是这些行:var a = {x:1}let b = {x:2}let c = {x:3}let d = {x:4}let tab1 = []a.y = 5b.y = 10c.y = 10d.y = 10let 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 = 5b.y = 10c.y = 10d.y = 5e.y = 10f.y = 10let group1 = [a, b, c]let group2 = [d, e, f]然后你会看到行为如你所愿。我不确定你的代码的目的是什么,但我想你会知道从这里去哪里。

慕神8447489

group1andgroup2是引用相同对象的数组,使用JSON.parse()and进行复制JSON.stringify():let group1 = JSON.parse(JSON.stringify([a, c, d]));let group2 = JSON.parse(JSON.stringify([a, b, d]));

杨__羊羊

我试图制作引用对象的深层副本,它可以工作let group1 = [Object.assign({}, a), c, d]    let group2 = [Object.assign({}, a), b, d]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript