在两个单独的数组对象之间找到公共id字段并合并它的角度js

问题描述 投票:1回答:1

我有两个具有多个字段的独立数据数组对象:enter image description here enter image description here这也是数据对象数组在其中使用eventId字段的样子。

enter image description here

annotateData对象具有eventId字段,该字段也存在于数据对象中。我想检查哪个数据元素在annotateData中具有相同的eventId,然后将该annotateData元素合并到数据对象元素。因此输出将具有添加了annotateObject字段的数据对象。

data: [{
  0:{ annotateData fields + already present data fields} //if eventId matches
}]

有没有更有效的方法来执行此操作而不是在整个数据对象中运行循环?

javascript arrays angularjs
1个回答
0
投票

我不认为有另一种有效的方法来做这个而不是循环。虽然我会实现一些辅助方法来迭代和合并(如给定的here):

Array.prototype.indexOfWithKeyValue = function(key, value) {
  var index = -1;
  var _this = this;

  for (var i = 0; i < this.length; i++) {
    var item = _this[i];
    if (item[key] === value) {
      index = i;
      break;
    }
  }

  return index;
};

Array.prototype.find = function(key, value) {
  var index = this.indexOfWithKeyValue(key, value);
  return this[index];
};

然后迭代:

var annotateData = [];  // sample data
var data = [];  // sample data

angular.forEach(annotateData, function(aData) {
    var matchingData = data.find("eventId", aData.eventId);

    if (matchingData) {
        // Matching fields from "annotateData" will be merged over "data"
        angular.merge(matchingData, aData);
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.