我可以简化这个Javascript循环吗?

时间:2014-07-29 11:50:00

标签: javascript angularjs

我可能已经绕过最复杂的方式来实现这一目标(参见下面的代码)。有经验的人能否告诉我是否有更好的方法?

我有两个JSON对象resourcedata。我想循环遍历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()
        }

3 个答案:

答案 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()
}