Javascript是否替换/修改变量指向的对象



我有一个变量指向一个对象,并希望用另一个修改过的对象替换该对象。是否有任何Javascript函数可以完成下面控制台会话示例中我假设的"assign"函数所做的操作?

var x = [[1,2,3], [4,[8,2,[1,4,"Delete Me"],4],6]]
var y = getSubArrayWithString(x) // Equivalent to y = x[1][1][2] in this case
JSON.stringify(y)
>>> "[1,4,"Delete Me"]"
var newY = y.filter(item => item !== "Delete Me")
y.assign(newY) // Equivalent to x[1][1][2] = newY
JSON.stringify(x)
>>> "[[1,2,3],[4,[8,2,[1,4],4],6]]"

如果我执行的y = newY只是将y变量重新分配到newY对象,它不会修改x

我知道我可以使用splice修改y,但当我应用更复杂的更改来获得newY时,这将不起作用

理想情况下,getSubArrayWithString()将返回对您感兴趣修改的数组的父级的引用(甚至可能是您想要的索引(。然后很容易:

var x = [[1,2,3], [4,[8,2,[1,4,"Delete Me"],4],6]]
var [y, ind] = [x[1][1], 2]  // getSubArrayWithString returns parent and index
y[ind] = y[ind].filter(item => item !== "Delete Me")
console.log(x)

如果你真的只使用数组引用,你可以使用splice()来更改数组,而不是覆盖它。你甚至可以splice()所有内容并重新分配新值,但这似乎效率很低:

var x = [[1,2,3], [4,[8,2,[1,4,"Delete Me"],4],6]]
var y = x[1][1][2]
var newY = y.filter(item => item !== "Delete Me")
y.splice(0,y.length)  // sketchy, but works
Object.assign(y, newY)
console.log(x)

最新更新