2016-10-09 1 views
1

У меня есть сервер webpack dev. В нем я объявляю массив, содержащий некоторые данные. В одном из конечных пунктов я копирую эти данные, манипулирую копией, а затем возвращаю копию. Вот код:webpack-dev-server, похоже, не уважает array.slice (0)?

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, что не то, что я хотел бы сделать.

Я пытаюсь, чтобы он хранил исходные данные, скопируйте эти данные. Сделайте мою работу над копией, а затем верните копию.

ответ

0

data.slice(0) всегда будет первым элементом в массиве данных, поскольку он не является мутатором. Попробуйте назначить copyOfData для data.shift() вместо

0

Я понял это. Это связано с тем, что array.slice() производит только мелкую копию. Это означало, что хотя массивы не были ===, они оба ссылались на одни и те же объекты. Поэтому, когда я изменил историю объекта в копии, это также повлияло на исходный массив (поскольку оба они указывали на один и тот же объект в памяти).

Чтобы исправить это, я должен был глубокой копии массива используя вместо этого следующее:

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

Это не проблема с WebPack или узлом, а недоразумение с моей стороны о том, как Array.prototype.slice() работ ,