我有两个具有多个字段的独立数据数组对象: 这也是数据对象数组在其中使用eventId
字段的样子。
annotateData对象具有eventId
字段,该字段也存在于数据对象中。我想检查哪个数据元素在annotateData中具有相同的eventId
,然后将该annotateData元素合并到数据对象元素。因此输出将具有添加了annotateObject字段的数据对象。
data: [{
0:{ annotateData fields + already present data fields} //if eventId matches
}]
有没有更有效的方法来执行此操作而不是在整个数据对象中运行循环?
我不认为有另一种有效的方法来做这个而不是循环。虽然我会实现一些辅助方法来迭代和合并(如给定的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);
}
});