使用JavaScript中的另一个数组对象中的数据替换数组中的对象

时间:2018-04-24 22:33:43

标签: 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个事件循环通过

那么性能呢?

由于

1 个答案:

答案 0 :(得分:1)

一种简单的方法是循环更新数组(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);




根据表现,还有很多其他因素未知。例如,如果这是经常发生的运行时操作,但底层数据是相当静态的,那么为什么不在数据存储中创建和存储结果呢?