javascript - Javascript替换/修改变量指向的对象?
问题描述
我有一个指向一个对象的变量,并且想用另一个修改过的对象替换该对象。是否有任何 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
使用 splice 就地修改,但是当我应用更复杂的更改来获取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)
推荐阅读
- javascript - HightCharts:如何将饼图位置对齐到容器的右角或左角
- java - 如何为 Webapp 创建公共 url
- google-api - 谷歌知识图 API 使用
- python - 无法从 tf.data.Dataset.from_generator 读取数据
- jquery-selectors - 如何在选择器赛普拉斯中使用 .length 的结果
- devops - 在 ubuntu 中执行 mvn -version 或 mvn 命令时出现 DevOps 错误
- python - 在 Python 中不使用 RegEx 替换或删除文本文件中的特定符号
- html - 我无法通过 CSS 更改项目的宽度
- python - 如何使用 openpyxl 过滤列数据
- asp.net-mvc - 在视觉工作室中禁用打字稿有时不起作用