我可能已经绕过最复杂的方式来实现这一目标(参见下面的代码)。有经验的人能否告诉我是否有更好的方法?
我有两个JSON对象resource
和data
。我想循环遍历data
中的每个新项目,如果密钥在resource
中匹配,则将资源中该键的值替换为数据中的值。如果这没有意义,我下面的代码就会出现。
这有效并且做我需要它做的事情,但它感觉不对(不要笑)
factory.put = function (resource, data) {
dataArr = [data];
resourceArr = [resource];
for (var i = 0; i < dataArr.length; i++) {
var obj = dataArr[i];
for (var key in obj) {
var attrName = key;
var attrValue = obj[key];
for (var i = 0; i < resourceArr.length; i++) {
var obj = resourceArr[i];
for (var key in obj) {
var resourceArrName = key;
var resourceArrValue = obj[key];
if (resourceArrName == attrName){
resource[resourceArrName] = attrValue
}
}
}
}
}
resource.put()
}
答案 0 :(得分:2)
除非我遗漏了某些内容,否则您无需将对象填充到数组中。您只需遍历一个对象data
的属性,检查该属性是否存在于另一个对象resource
中,如果存在,则将resource
中的值替换为data
中的值{1}}。
for (var key in data) {
var attrName = key;
var attrValue = data[key];
if(resource[attrName]) {
resource[attrName] = attrValue;
}
}
答案 1 :(得分:1)
您不需要遍历resourceArr的密钥。只需检查resourceArr [key]是否存在,如果是,则设置值。
类似的东西:
if(resourceArr[key])
resourceArr[key] = attrValue;
答案 2 :(得分:1)
简化循环的一种方法是使用forEach函数,angular提供:
factory.put = function (resource, data) {
dataArr = [data];
resourceArr = [resource];
angular.forEach(dataArr, function(obj) {
angular.forEach(obj, function(value, key) {
angular.forEach(resourceArr, function(resourceObj) {
if(resourceObj[key]) {
resourceObj[key] = value;
}
}
}
}
resource.put()
}