如何覆盖数组中的对象而不是添加新对象

时间:2018-08-11 12:28:42

标签: javascript

var foo = [];

var btn = document.getElementById("foo");
btn.addEventListener("click", function(){
   var data = {
       "id": 1,
       "track": {
           "map_name": [
               {x: 21, y: 21}
           ]
       }
   }
   foo.push(data);
   console.log(foo);
});
<button id="foo">Add</button>

在这里,每次单击“添加”时,我都将整个对象添加到数组中。哪个不好,我知道。我想知道如何仅覆盖id为1的对象内部,并将新对象添加到该"map_name"数组中。因此,我避免使用新值一遍又一遍地克隆同一对象。我该如何存档?

3 个答案:

答案 0 :(得分:0)

希望这会起作用。去尝试一下 尝试类似

constexpr int sum = DRsum(matrix);

在这里,newData数组将为您提供数据对象,并且无需推入就可以插入foo数组。因此,始终foo数组仅具有newData数组中的值。

答案 1 :(得分:0)

使用键为轨道ID的对象代替使用数组。然后,您可以找到或创建感兴趣的曲目的元素,并更新其map_name数组。

var foo = {};

var btn = document.getElementById("foo");
btn.addEventListener("click", function() {
  var cur_track = foo[1] || {
    id: 1,
    track: {
      map_name: []
    }
  };
  cur_track.track.map_name.push({
    x: 21,
    y: 21
  });
  console.log(foo);
});

答案 2 :(得分:0)

这可能会给您带来解决问题的灵感

var foo = [];

var btn = document.getElementById("foo");
btn.addEventListener("click", function () {
  var targetId = 1;
  var targetIndex = foo.findIndex(f => f.id === targetId); // check if foo already have the id
  var coordinate = {
    x: 21,
    y: 21
  };

  // if found
  if (targetIndex > -1) {
    // push the coordinate inside `map_name` for target 
    foo[targetIndex].track.map_name.push(coordinate);
  } else {
    var data = {
      "id": targetId,
      "track": {
        "map_name": [
          coordinate
        ]
      }
    }
    foo.push(data);
  }

  console.log(foo);
});