将对象添加到数组时for for循环中的不变性

时间:2017-10-25 18:50:58

标签: javascript

我有一个for of,里面有一个for in循环,它从Neo4J数据库中获得结果。使用Object.assign,我获取结果对象并将其中的属性分配给新对象。我的理解是这是不变的。

然后我想将新的结果对象添加到数组中以返回到达结果。

我可以在循环外声明一个空数组,并使用Array.concat为每次迭代创建新数组。另一种选择可能是使用Array.push。这些都不是永恒的,因为我要么推送数组,要么覆盖变量。

有没有办法结束所有对象的结果数组,这是不可变的?

let results = []
for (const row of argsArray) {
    for (const key in row) {
        const neo4jPropInUse = await neo4j.session(null, cypher.ngp(key, row[key]))
        if (neo4jPropInUse.length !== 0) {
            console.log('IN USE DETECTED')
            const thingResult = Object.assign({}, {
                [thingSerialNumber]: neo4jPropInUse[0].get(`RESULT`).properties[thingSerialNumber],
                key: key
            })
            results = results.concat([thingResult])

        }
    }
}

1 个答案:

答案 0 :(得分:1)

即使用const声明一个对象,你仍然可以修改它的内容,你就不能再重新分配它了。如果你的目标是在循环完成后返回一个不可修改的数组,你可以使用Object.freeze来阻止你修改对象(浅层)。

Object.freeze(results);

现在,如果您尝试从该阵列推送或弹出,它将抛出错误。请注意,这是一个“浅冻结”,您仍然可以修改作为数组一部分的对象内的任何值。希望这会有所帮助。

enter image description here