对象和数组通过映射函数合并

Object and array merge by map function

本文关键字:映射函数 合并 数组 对象      更新时间:2023-09-26

我有一个小问题,我想通过映射函数合并Object和数组。我的代码是:

var headers = [{
    "name": "Date",
    "dtype": "date",
    "dtitle": "Inserta date"
  }, {
    "name": "Patient",
    "dtype": "text",
    "dtitle": "Insert patient name"
  }
];
var rows = [
  [1, 2],
  [3, 4],
  [5, 6]
];
var c = 0;
var item = [];
var items = [];
rows.map(function(v) {
  v.map(function(a) {
    h = headers[c];
    h.value = a;
    item.push(h);
    c++;
  });
  items.push(item);
  c = 0;
});
console.log(items);

最后,我总是从行数组中得到重复的最后一条记录。我不知道我在哪里犯了错误。我尝试使用_ each和for循环,但总是得到相同的结果。

我想收到这个结果,例如:

result = [
  [
    {
        "name":"Date",
        "dtype":"date",
        "dtitle":"Inserta date",
		"value":1
    },
    {
        "name":"Patient",
        "dtype":"text",
        "dtitle":"Insert patient name",
		"value":2
    }
],
  [
    {
        "name":"Date",
        "dtype":"date",
        "dtitle":"Inserta date",
		"value":3
    },
    {
        "name":"Patient",
        "dtype":"text",
        "dtitle":"Insert patient name",
		"value":4
    }
]];

h = headers[c];将为您提供对headers数组中某个对象的引用。您更改它,并将引用放入结果中;所有的Date对象实际上都是同一个对象(您可以验证headers现在在Date对象中也包含value: 5)。Patient对象也是如此。

您需要克隆对象,而不是引用,类似于h = clone(headers[c]);