【问题标题】:Parse JSON, find matches of values and store in array解析 JSON,查找匹配的值并存储在数组中
【发布时间】:2014-12-09 21:17:16
【问题描述】:

我无法弄清楚如何限制我的输出。我必须比较对象中每个属性的值,但我只希望每个 ID 有 1 个输出。

有什么想法吗?

//JSON 示例

var obj1 = {
"Summary" : 
[
    {
        "ID" : "1234", 
        "Name" : "John", 
        "Status" : "Green",
    },
    {
        "ID" : "5678", 
        "Name" : "Mike", 
        "Status" : "Green",
    },
    {
        "ID" : "9012", 
        "Name" : "Tom", 
        "Status" : "Red",
    }

]
};

//我的代码

var attributesvalues = ["Mike", "Green", "Red"];
var sg1 = [];
var k;
var l;


//push name of each attribute value to a new array
//one example
sg1.push(attributesvalues[0]);

 //go through each ID, if name value exist, push the #1, if not, push nothing
 for (k = 0; k < obj1.Summary.length; k++) {
 for (l in obj1.Summary[k]) {
    if (sg1[0] == obj1.Summary[k][l]){
    sg1.push("1");
    }
    else{
    sg1.push("");   
    }
 }

 }

输出应该如下所示 - 我只想要 4 个值,每个 ID(3) 的名称 + 1 或 ""

sg1 = [“迈克”、“”、“1”、“”]
sg2 = ["绿色", "1", "1", ""]

相反,我得到的是每个属性的名称 + 1 或“”。

sg1 = [“迈克”、“”、“”、“”、“”、“1”、“”、“”、“”、“”]
sg2 = ["绿色", "", "", "1", "", "", "1", "", "", ""]

您可以提供的任何其他指示或提示将不胜感激。我仍在尝试掌握 JS。

【问题讨论】:

    标签: javascript arrays json parsing


    【解决方案1】:

    在完成整个 for-in 循环之前,您不知道是否匹配。

    var found;
    
    for (k = 0; k < obj1.Summary.length; k++) {
        found = "";
        for (l in obj1.Summary) { 
            if (obj1.Summary[i][l] == sg1[0]) {
                found = "1";
                break;
            }
        }
        sg1.push(found);
    }
    

    【讨论】:

    • Barmar 感谢您的快速回答 - 不幸的是,我遗漏了(我会更新)我可能还需要匹配状态或 ID。这是我的 JSON 的简化示例,但我的“attributesvalues”数组中可能有大约 50 个不同的值,这意味着我可能不得不在不同的属性之间来回切换。
    • 我已经修改了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多