javascript - 在 JavaScript 中用另一个数组对象的数据替换数组中的对象

标签 javascript arrays

假设我们有 2 个数组:

array1 有 1 个事件:

var array1 = [
      {
      start: '2018-04-24T10:00:00',
      end: '2018-04-24T11:00:00',
      title: 'Been to Break'
    }
  ];

array2 有 3 个事件:

  var array2 = [
      {
        start: '2018-04-24T08:00:00',
        end: '2018-04-24T10:00:00',
        title: 'Lunch'
      },
      {
        start: '2018-04-24T10:00:00',
        end: '2018-04-24T11:00:00',
        title: 'Break'
      },
      {
        start: '2018-04-24T13:00:00',
        end: '2018-04-24T14:00:00',
        title: 'Meeting'
      }
    ];

期望的结果应该是一个新数组:array3

var array3 = [
  { //event 1
    start: '2018-04-24T08:00:00',
    end: '2018-04-24T10:00:00',
    title: 'Lunch'
  },
  { //event 2
    start: '2018-04-24T10:00:00',
    end: '2018-04-24T11:00:00',
    title: 'Been to Break'
  },
  { //event 3
    start: '2018-04-24T13:00:00',
    end: '2018-04-24T14:00:00',
    title: 'Meeting'
  }
];

从 array3 中的预期结果可以看到,由于开始值和结束值匹配,因此 array2 中的事件 2 被替换为 array1 中的事件 1。

这可以用 JavaScript 完成吗?如果我们有 1000 个事件要循环,那么性能如何

谢谢

最佳答案

一种简单的方法是循环更新数组 (array1) 以在 array2 中查找匹配项,如果找到则替换它。

var array1 = [{
  start: '2018-04-24T10:00:00',
  end: '2018-04-24T11:00:00',
  title: 'Been to Break'
}];

var array2 = [{
    start: '2018-04-24T08:00:00',
    end: '2018-04-24T10:00:00',
    title: 'Lunch'
  },
  {
    start: '2018-04-24T10:00:00',
    end: '2018-04-24T11:00:00',
    title: 'Break'
  },
  {
    start: '2018-04-24T13:00:00',
    end: '2018-04-24T14:00:00',
    title: 'Meeting'
  }
];

array1.forEach((evUpdate) => {
  const matchIndex = array2.findIndex((ev) => ev.start === evUpdate.start && ev.end === evUpdate.end);

  if (matchIndex > -1) {
    array2.splice(matchIndex, 1, evUpdate);
  }
});

console.log(array2);

就性能而言,还有许多其他因素未知。例如,如果这是经常发生的运行时操作,但底层数据相当静态,那么为什么不创建结果并将其存储在数据存储中?

关于javascript - 在 JavaScript 中用另一个数组对象的数据替换数组中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50011612/

相关文章:

javascript - 我可以使用多个 for 循环通过索引访问字符串、数组中的单个字母吗?

c - 程序跳过用户输入(C 语言的大型模块化图书馆信息系统)

javascript - 使用 fabric.js 的镜像克隆对象位置问题

javascript - 从 Backbone 事件监听器回调函数中获取返回值

JavaScript 遍历对象属性和原型(prototype)链

python - 根据Python中的条件从两个数组中随机选择

javascript - 在 MERN 应用程序(React 客户端)中外包 API 调用的正确方法?

javascript - Node.js 等待回调或数据库响应

java - 将数组转换为字符串时出错

c - malloc 一次,然后在结构数组上分配内存