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

标签 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 进行迭代时如何替换值。事实上,这可能吗?我对格式感到抱歉。提前致谢!

最佳答案

此代码假设您的 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
  }
]

关于javascript - 在 Javascript 中迭代 JSON 对象时动态插入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21942543/

相关文章:

javascript - Ext.menu.Menu(上下文菜单)仅在右键单击时显示一次 - Ext JS 4.2.1

javascript - TinyMCE 5 - 仅显示文本区域中的第一个单词并隐藏结构

JavaScript - 想知道如何添加 html 元素

java - 在数组搜索中找不到用于打印用户输入的 if 语句

javascript - 在 Javascript 中预定义数组长度

javascript - 谷歌脚本中带有字符串的动态变量名称

android - 如何在 Android 中创建 JSON

json - 在 Swift 中检查 Firebase 快照是否等于 nil

javascript - 如何只加载一次页面

c# - 如何在 C# 中使用 Json.NET 基于值而不是索引获取数组中的元素?