我正在try 将值基于数组的对象推送到另一个数组中.第二个array.map函数似乎出了问题.在此之前,arrValues包含基于第一个array.ush的条目. 当我创建第二个对象及其值时,arrValues数组中有当前对象,而不是我创建的对象

非常困惑!

let arrMap = [{
  "field_desc": "Building Name",
  "type": "string"
}]
let objFind = {
  values: [
    ["BUILDING1", "BUILDING2"],
    []
  ]
}


let arrValues = [];
let objValues = {};

objValues.row = 0;
objValues.values = arrMap.map(function(element, index, array) {
  let objFindExcel = objFind.values[0][0];
  element.field_value = objFindExcel;
  return element;
}, []);

arrValues.push(objValues);

objValues = {};

objValues.row = 1;
objValues.values = arrMap.map(function(element, index, array) {
  let objFindExcel = objFind.values[0][1];
  element.field_value = objFindExcel;
  return element;
}, []);

arrValues.push(objValues);
console.log(arrValues);

我期待这个:

[{
  "row": 0,
  "values": [{
    "field_desc": "Building Name",
    "type": "string",
    "field_value": "BUILDING1"
  }]
}, {
  "row": 1,
  "values": [{
    "field_desc": "Building Name",
    "type": "string",
    "field_value": "BUILDING2"
  }]
}]

但我得到的是:

[{
  "row": 0,
  "values": [{
    "field_desc": "Building Name",
    "type": "string",
    "field_value": "BUILDING2"
  }]
}, {
  "row": 1,
  "values": [{
    "field_desc": "Building Name",
    "type": "string",
    "field_value": "BUILDING2"
  }]
}]

推荐答案

修改arrMap数组中元素的field_value属性时,会影响引用同一对象的所有实例.

为了解决这个问题,您应该在映射过程中为arrMap数组中的每个条目创建一个新对象.

请参阅以下代码:

let arrMap = [{
  "field_desc": "Building Name",
  "type": "string"
}];
let objFind = {
  values: [
    ["BUILDING1", "BUILDING2"],
    []
  ]
};

let arrValues = [];


function createObject(template, field_value) {
  return {
    field_desc: template.field_desc,
    type: template.type,
    field_value: field_value
  };
}


let objValues = {};
objValues.row = 0;
objValues.values = arrMap.map(function(element, index, array) {
  let objFindExcel = objFind.values[0][0];
  return createObject(element, objFindExcel);
});

arrValues.push(objValues);


objValues = {};
objValues.row = 1;
objValues.values = arrMap.map(function(element, index, array) {
  let objFindExcel = objFind.values[0][1];
  return createObject(element, objFindExcel);
});

arrValues.push(objValues);

console.log(arrValues);

Javascript相关问答推荐

使用TMS Web Core中的HTML模板中的参数调用过程

我试图实现用户验证的reduxstore 和操作中出了什么问题?

使用axios.获取实时服务器时的404响应

if/else JavaScript中的条件行为

手机上的渲染错误文本必须在文本组件中渲染,但在浏览器上没有问题<><>

为什么我的导航条打开状态没有在窗口addeventlistener(Reaction Js)中更新?

无法使用单击按钮时的useState将数据从一个页面传递到另一个页面

我可以使用使用node.js创建的本地主机来存储我网站上提交的所有数据吗?没有SQL或任何数据库.只有HTML语言

IF语句的计算结果与实际情况相反

单个HTML中的多个HTML文件

在使用REACT更改了CSS类之后,无法更改CSS样式

DOM不自动更新,尽管运行倒计时TS,JS

将数组扩展到对象中

在画布中调整边上反弹框的大小失败

使用Ace编辑器对子组件实例的native-element 进行Angular 获取时面临的问题

Reaction即使在重新呈现后也会在方法内部保留局部值

未找到用于 Select 器的元素:in( puppeteer 师错误)

如何创建一个for循环,用于计算仪器刻度长度并将其放入一个HTML表中?

浮动标签效果移除时,所需的也被移除

Google OAuth 2.0库和跨域开放程序的问题-策略错误