array1.splice(1,1)正在从我使用array1.slice(0)创建的array2中删除数据

时间:2016-05-13 10:50:01

标签: javascript jquery arrays angularjs d3.js

我有JSON数据,我已将该数据转换为对象数组,并使用.slice(0)方法将该数组分配到另一个数组中。

当我尝试从指定的数组中删除某些元素时,它会从原始元素中删除相同的元素。

但我不想在任何时候改变原来的阵列。

var values = [
  {
    "timeId":"201501010100",
    "Week1Volume": 2454721,
    "Week2Volume": 7017731,
    "Week3Volume": 5656528,
    "Week4Volume": 2472223
  },
  {
    "timeId":"201501010200",
    "Week1Volume": 2454721,
    "Week2Volume": 7017731,
    "Week3Volume": 5656528,
    "Week4Volume": 2472223
  },
  {
    "timeId":"201501010300",
    "Week1Volume": 1999120,
    "Week2Volume": 5355235,
    "Week3Volume": 5120254,
    "Week4Volume": 2607672
  }]; // This is my JSON data

var weekNames = d3.keys(values[0]).filter(function(key) { return key !== "timeId" && key!== "weeksVolume";});;

values.forEach(function(d) {
  d.weeksVolume = weekNames.map(function(name) { return {name: name, value: +d[name]}; });
}); // original array

var data = values.slice(0); // Data is my new array

function removeFromSecondArray(){

    // Here I am removing the first object of weekVolumes from each object of the array
    data.forEach(function(d) {
        d.weeksVolume.splice(1,1);
        });
};

但执行上述功能后,“值”的第1个元素也被删除了。

1 个答案:

答案 0 :(得分:0)

也许这是你的问题:

复制JSON对象时,您将创建对旧对象的引用。因此,将对两个对象执行对一个引用执行的任何操作。 因此,您应该像这样应用深层复制,然后应用进一步的操作。

  var newObj=JSON.parse(JSON.stringify(oldObj));

我希望这会对你有所帮助。这是一份深刻的副本。它不会创建引用。