使用.push进行奇怪的数组行为

时间:2014-10-17 15:22:06

标签: javascript arrays multidimensional-array

我正在研究一个调度脚本,该脚本从多维数组中获取调度数据,并仅将原始数组中与当前时间对应的值推送到仅包含当前正在工作的人的第二个多维数组。

以下是数据存储方式的简单示例:

[["John Smith",0700,1700],["Peter Smith",0900,1600]]

仅在我的数据中,开始时间存储在索引7中,结束时间存储在内部数组的索引8中(不确定我是否在此使用正确的术语)。

我的if语句正在评估位于名为workingToday的数组中的原始调度(开始时间和结束时间)中的两个值,查看当前时间是否在这些值之间,如果是,则使用push方法将相应的数组(包含工作者名称,开始/结束时间等)复制到名为workingNow的新数组中。

除了从我从另一个站点提取的计划构建初始数组workToday之外,我不会对此阵列执行任何修改。我执行的每个其他函数都是在workNow之后完成的,该语句将workingToday中的数据拉入workingNow。

我遇到的问题是,当某些东西修改了workingNow数组时,它还会修改原来的workingToday数组,这会搞砸我试图实现的其他一些功能。我的印象是将值推入新数组并不会将它们链接到旧数组,但我认为这可能是错误的。

这是我的if语句代码:

var workingNow = [];
for (i = 0; i < workingToday.length; i++){
    //convert time strings to numbers to compare
    var startTime = parseInt(workingToday[i][7]);
    var endTime = parseInt(workingToday[i][8]);
    //compare start and end times with the current time and add those working to the new array
    if(startTime < parseInt(moment().format('hhmm')) && parseInt(moment().format('hhmm')) < endTime){
        workingNow.push(workingToday[i]);
    };
};

作为我遇到的问题的一个例子,我说我已经将这些数据用于今天工作(我已将另一个值添加为员工ID到索引1:

[["John Smith",1234,0700,1700],["Peter Smith",4567,0900,1600],["June Smith",8901,1200,2200]]

当前时间是1100.WorkNow的输出应该是:

[["John Smith",1234,0700,1700],["Peter Smith",4567,0900,1600]]
自6月以来一直没有工作。然后,我稍后使用splice方法删除员工ID以获取此信息:

[["John Smith",0700,1700],["Peter Smith",0900,1600]]

我遇到的问题是,即使我在workingNow数组上执行了此splice方法,也会修改原始workingToday中的值,以便同时删除该员工ID。所以workToday最终看起来像这样:

[["John Smith",0700,1700],["Peter Smith",0900,1600],["June Smith",8901,1200,2200]]

(虽然我没有在原始阵列上执行这些功能,但只有June Smith仍然在阵列中拥有她的员工ID)。

我希望我在这里有所作为。我只是希望能够将值从一个数组推送到一个新数组,然后对新数组执行修改而不会影响原始数据。如果这就是推送功能应该如何工作,那么也许我在其他地方犯了一个错误 - 我无法弄清楚那会是什么,因为我真的不做任何其他事情。 workingToday数组,所以我不知道如何修改它。

0 个答案:

没有答案
相关问题