You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将源数组指定元素覆盖复制到目标数组对象?

解决方案:转换数组对象为指定结构

你的需求是把obj1中的每个元素映射成{title: name, body: date}的结构,替换dest的内容。之前的Object.assign用法不对,因为它无法处理数组的遍历,而且你错误地直接访问了数组的name属性(数组本身没有这个属性,每个元素才有)。

这里有两种简洁的实现方式:

方式1:使用Array.map()生成新数组(推荐)

map()方法会遍历源数组的每个元素,返回一个全新的转换后的数组,直接赋值给dest即可:

var obj1 = [
  {
    "id": 1373744172,
    "name": "Run",
    "distance": 6051.8,
    "date": "2018-01-24T16:43:09Z",
  },
  {
    "id": 1370355715,
    "name": "Swim",
    "distance": 1043,
    "date": "2018-01-22T21:10:28Z",
  }
]

var dest = obj1.map(item => ({
  title: item.name,
  body: item.date
}));

console.log(JSON.stringify(dest));

运行后会得到你想要的结果:

[
  {"title":"Run","body":"2018-01-24T16:43:09Z"},
  {"title":"Swim","body":"2018-01-22T21:10:28Z"}
]

方式2:修改原dest数组(如果需要保留原数组引用)

如果dest在其他地方被引用,不能直接重新赋值,可以先清空原数组,再逐个添加转换后的元素:

var obj1 = [
  {
    "id": 1373744172,
    "name": "Run",
    "distance": 6051.8,
    "date": "2018-01-24T16:43:09Z",
  },
  {
    "id": 1370355715,
    "name": "Swim",
    "distance": 1043,
    "date": "2018-01-22T21:10:28Z",
  }
]
var dest = [
  {title: "Placeholder", body: "1900-01-01T00:00:00Z"}
]

// 清空原数组
dest.length = 0;
// 遍历obj1,转换后添加到dest
obj1.forEach(item => {
  dest.push({
    title: item.name,
    body: item.date
  });
});

console.log(JSON.stringify(dest));

为什么之前的方法无效?

  • Object.assign主要用于合并对象,你试图用它处理数组,并且错误地访问了obj1.name——obj1是数组,没有name属性,只有数组里的每个元素才有name和date属性。
  • 你需要遍历数组的每个元素,对每个元素进行结构转换,而不是直接操作整个数组。

内容的提问来源于stack exchange,提问作者George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:32:19