webpack-dev-server似乎不尊重array.slice(0)?

时间:2016-10-09 19:14:53

标签: node.js webpack-dev-server

我有一个webpack开发服务器。在其中我声明了一个包含一些数据的数组。在其中一个端点中,我复制该数据,操作副本,然后返回副本。这是代码:

grep

问题是,在第一次请求之后,我的事件历史记录为零,即使数据中的事件应与筛选条件匹配。据我所知,const data = [{ title: 'Title 1', history: [{startTime: 1}, {startTime:5}] }, { title: 'Title 2', history: [{startTime:3}, {startTime:7}] }]; module.exports = () => { app.use(send.json()) .use(connectRoute(function (router) { router.get('endPoint/:fromDate/:toDate', function(req, res, next){ let copyOfData = data.slice(0); copyOfData.forEach((dataPoint)=>{ let startTime = moment(req.params.fromDate,'X'); let endTime = moment(req.params.toDate,'X'); let filteredHistory = dataPoint.history.filter((event)=>{ let eventTime = moment(event.startTime, 'X'); return (eventTime.isAfter(startTime) && eventTime.isBefore(startTime)); }); }); res.end(res.json(copyOfWorkflows)); } } } 仅在第一次被调用。之后它只使用data.slice(0),这不是我想做的。

我试图让它存储原始数据,复制该数据。在副本上完成我的工作,然后返回副本。

2 个答案:

答案 0 :(得分:0)

data.slice(0)将始终是数据数组中的第一个元素,因为它不是mutator。尝试将copyOfData分配给data.shift()而不是

答案 1 :(得分:0)

我想出来了。这与array.slice()仅产生浅拷贝的事实有关。有效地意味着虽然数组不是===,但它们都引用了相同的对象。因此,当我修改副本中对象的历史记录时,它也会影响原始数组(因为它们都指向内存中的同一对象)。

要解决此问题,我必须使用以下内容深度复制数组:

let copyOfData = JSON.parse(JSON.stringify(data));

这不是webpack或节点的问题,而是我对Array.prototype.slice()如何工作的误解。