首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >webpack-开发-服务器似乎不尊重array.slice(0)?

webpack-开发-服务器似乎不尊重array.slice(0)?
EN

Stack Overflow用户
提问于 2016-10-10 03:14:53
回答 2查看 21关注 0票数 1

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

代码语言:javascript
运行
复制
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)只在第一次调用时被调用。之后,它只使用copyOfData,这不是我想要做的。

我正在尝试让它存储原始数据,复制该数据。在复印件上做完我的工作,然后把复印件还回去。

EN

回答 2

Stack Overflow用户

发布于 2016-10-10 03:24:59

data.slice(0)将始终是数据数组中的第一个元素,因为它不是一个赋值函数。改为尝试将copyOfData赋值给data.shift()

票数 0
EN

Stack Overflow用户

发布于 2016-10-10 23:40:09

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

为了解决这个问题,我不得不使用下面的代码来深拷贝数组:

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39947509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档