我有一个变量指向一个对象,并想用另一个修改后的对象替换该对象。在下面的示例控制台会话中,是否有任何Javascript函数可以执行我假设的“分配”功能?
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
。
我知道我可以使用拼接来修改y
,但是当我应用更复杂的更改以获取newY
答案 0 :(得分:1)
理想情况下,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)