推入一个对象时其他值在数组中更改

时间:2019-01-08 13:58:39

标签: javascript arrays

我有一个处理数组的函数,并在最后将它们放入特定格式。我通过循环处理已处理但未格式化的输出,将其格式化为JSON并将其推送到数组来完成此操作。但是,当我将其推送到数组时,数组中已有的所有其他项都变为我刚刚推送的内容。为什么,我该如何解决?我可能错过了一些愚蠢的东西,但是我无法弄清楚问题的原因。

selectionChange

当我运行function removeLastXItems(newArr, i, format, key){ newArr.splice(newArr.length-i-1, i); var toInsert, finalArr = []; for (b=0;b<newArr.length;b++){ toInsert = format; toInsert[key] = newArr[b]; finalArr.push(toInsert); console.log(finalArr) } return finalArr; } 时,我期望输出为:

removeLastXItems(["foo", "bar", "fob", "bof", "far", "boo"], 2, {itGoes:"here", andNot:"here"}, "itGoes")

但是,实际输出是:

[
  { itGoes: "foo",
    andNot: "here"
  },
  { itGoes: "bar",
    andNot: "here"
  },
  { itGoes: "fob",
    andNot: "here"
  },
  { itGoes: "bof",
    andNot: "here"
  }
]

很明显,结果正在改变,就像我在控制台中看到的那样:

[ 
  { itGoes: 'boo', 
    andNot: 'here' },
  { itGoes: 'boo', 
    andNot: 'here' },
  { itGoes: 'boo', 
    andNot: 'here' },
  { itGoes: 'boo', 
    andNot: 'here' } 
]

显而易见,每次按下时,数组中的其他项都会改变!

我看过this similar post,但是我没有犯任何答案中概述的错误。因此,如果有人能找到我的错误,我将不胜感激!

0 个答案:

没有答案