javascript - 如何使用变量进行推送?
问题描述
您好,我在 JavaScript 中使用 push 方法时遇到问题。我正在推送一个对象,并且在每次推送中我只更改对象的一些属性。我的问题是,当我查看数组时,它给了我一个具有最后分配属性的对象数组。
当我此时查看变量 Panel 时,我得到一个包含两个相同值位置的数组。这个值是我最后一次分配的对象。
var ARGS = { "var-Instalation":"vi"};
var Panel = new Array();
var ParamsSingleStat = {
"datasource": "influxdb",
"targets": [{
"groupBy": [],
"measurement": "mqtt_consumer",
"select": [
[{
"params": [
"value"
],
"type": "field"
}]
],
"tags": [{
"key": "topic",
"operator": "=",
"value": ""
}]
}],
"title": "",
"type": "singlestat",
}
var PanelConfStatus = ParamsSingleStat;
var PanelAppStatus = ParamsSingleStat;
PanelAppStatus.targets[0].tags[0].value = "Instalacion/" + ARGS["var-Instalation"] + "/ECCE/EstadoApp"
PanelAppStatus.title = "Estado Aplicacion"
Panel.push(PanelAppStatus);
console.log(Panel)
PanelConfStatus.targets[0].tags[0].value = "Instalacion/" + ARGS["var-Instalation"] + "/ECCE/EstadoConfiguracion"
PanelConfStatus.title = "Estado Configuracion"
Panel.push(PanelConfStatus);
解决方案
您获得最后一个分配的原因是因为在 JavaScript 中,对象是通过引用传递的。您可以克隆它并将克隆推送到阵列。您可以使用克隆,Object.assign()
但考虑到对象的复杂性,我认为这还不够,因为Object.assign()
只会浅层克隆您的对象。我只能建议使用 lodash 进行深度克隆
推荐阅读
- d3.js - D3 多个甜甜圈。添加唯一的类名
- perforce - p4:提交的更改被错误地重新打开以供 perforce 审查委员会审查。如何将其恢复到提交状态?
- java - 如何避免在此代码中使用 if-else?
- javascript - 在 index.html 文件上导入 React 时遇到错误
- java - java.lang.UnsupportedOperationException:在尝试使用 ArrayList 时,AdapterView 不支持 addView(View)
- scala - 如何在 elasticsearch 6.3.0 中创建 TransportClient 对象
- javascript - 无法生成 0 到 10 之间的随机数
- java - 如何在 java 中创建可用的 KeyReleased 方法
- php - PHP If 语句 if (!$_POST) - !$_POST 是什么意思?
- java - 如何使用@Transaction 和线程