javascript - 解析 JSON,找到值的匹配项并将其存储在数组中

标签 javascript arrays json parsing

我无法弄清楚如何限制我的输出。我必须比较对象内每个属性的值,但我只需要每个 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 的窍门。

最佳答案

在完成整个 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);
}

关于javascript - 解析 JSON,找到值的匹配项并将其存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27388997/

相关文章:

javascript - 基于一个数组对多个数组进行排序

php - 使用javascript处理php发送的JSON数据

jquery - 循环具有数据属性的表行

javascript - 我可以在单个 Javascript 命令中选择多个变量吗?

javascript - 在正则表达式中应用最大和最小限制

javascript - 如果属性与数组中的值匹配,则过滤对象

对 printf 的调用似乎覆盖了字符串数组

php - 如何循环遍历两个不同的表?

asp.net - VB.net反序列化,JSON从类型 'Dictionary(Of String,Object)'到类型 'String'的转换

javascript - 使用 angularjs 在 div 标签之间插入 html