首页 > 解决方案 > 如何使用变量进行推送?

问题描述

您好,我在 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);

标签: javascriptarrays

解决方案


您获得最后一个分配的原因是因为在 JavaScript 中,对象是通过引用传递的。您可以克隆它并将克隆推送到阵列。您可以使用克隆,Object.assign()但考虑到对象的复杂性,我认为这还不够,因为Object.assign()只会浅层克隆您的对象。我只能建议使用 lodash 进行深度克隆

对象.assign()


推荐阅读