在Javascript中迭代JSON对象时动态插入值

时间:2014-02-21 18:37:35

标签: javascript arrays json loops

我的技能水平可能在兔子洞里走得太远了。

这是我得到的JSON数据(它有几个等级。)

field_user_skill: {
    und: {
        0: {
            field_skill: { 
                und: "JavaScript" 
            },
            field_user_skill_current_rating: {
                und: [{
                    value: "5"
                }]
            },
            field_user_skill_desired_rating: {
                und: [{
                    value: "9"
                }]
            },
            remove_button: "Remove",
            _weight: 0
        },
        1: {
            field_skill: {
                und: "Ruby"
            },
            field_user_skill_current_rating: {
                und: [{
                    value: "6"
                }]
            },
            field_user_skill_desired_rating: {
                und: [{
                    value: "10"
                }]
            },
            remove_button: "Remove",
            _weight: 1
        },
    }

我正试图围绕如何使用特定值(来自数组),例如。 var index = [0,1,2,3]迭代对象并替换每次传递时的ID,并希望创建一个新数组,我可以在其中比较field_user_skill_current_ratingfield_user_skill_desired_rating的值。

例如,在第一遍中,使用field_user_skill.und.0的第一个索引,然后使用field_user_skill.und.1使用下一个传递,依此类推,依此类推每个连续传递,这样我就可以创建新的基于每个结果的数组。

我尝试了所有(疯狂的)想法,但是现在我被卡住了。

我只是不确定如何在使用Javascript迭代时替换值。事实上,甚至可能吗?我很抱歉格式化。提前致谢!

1 个答案:

答案 0 :(得分:2)

此代码假定您的JSON永远不会偏离上述结构,因此您应该确保这种情况,否则您需要在尝试访问属性或数组值之前添加正确的存在性检查。您可以在一个循环中完成所有操作,但转换数据会使以后更容易使用。

另外,我不清楚你打算如何处理这些数据,所以我添加了一个例子。希望这可以为你提供一个很好的起点来实现你的目标。

Live Demo

<强> JS

var field_user_skill =  {
    und: {
        0: {
            field_skill: { 
                und: "JavaScript" 
            },
            field_user_skill_current_rating: {
                und: [{
                    value: "5"
                }]
            },
            field_user_skill_desired_rating: {
                und: [{
                    value: "9"
                }]
            },
            remove_button: "Remove",
            _weight: 0
        },
        1: {
            field_skill: {
                und: "Ruby"
            },
            field_user_skill_current_rating: {
                und: [{
                    value: "11"
                }]
            },
            field_user_skill_desired_rating: {
                und: [{
                    value: "10"
                }]
            },
            remove_button: "Remove",
            _weight: 1
        },
    }
};

function processSkills(userSkills){
    var data = [],
        skillNum = null; 

    for(skillNum in userSkills.und){
        data.push({
            'skill': userSkills.und[skillNum].field_skill.und,
            'currentRating': parseInt(userSkills.und[skillNum].field_user_skill_current_rating.und[0].value,10),
            'desiredRating': parseInt(userSkills.und[skillNum].field_user_skill_desired_rating.und[0].value,10),
        });
    }
    return data; 
}

function doYourComparison(data){

    var i = 0, 
        count = data.length;

    for(; i < count; i++){
        if(data[i].currentRating < data[i].desiredRating){
            alert('needs improvement'); 
        }else{
            alert('doint great'); 
        }
    }

}

var data = processSkills(field_user_skill);
doYourComparison(data); 

<强>结果

[
  {
    "skill": "JavaScript",
    "currentRating": 5,
    "desiredRating": 9
  },
  {
    "skill": "Ruby",
    "currentRating": 11,
    "desiredRating": 10
  }
]