【问题标题】:How to get unique value of json and sum another value in array?如何获得json的唯一值并在数组中求和另一个值?
【发布时间】:2016-07-24 15:04:33
【问题描述】:

我在那个 json 文件中有一个 json 值,三个电影的名称。 JSON 数据是动态数据。我想计算WinProbability 字段的百分比。我想要输出如下

movie_name = [ "12 Years a Slave", "American Hustle", "Captain"]
percentage = [ 3.47, 2.54, 4.22]

显示我的 JSON 文件

[
    {
        "ID":1,"Nominee":"12 Years a Slave","WinProbability":0.00,"WinType":"Win"
    },
    {
        "ID":2,"Nominee":"12 Years a Slave","WinProbability":2.81,"WinType":"Win"
    },
    {   
        "ID":3,"Nominee":"12 Years a Slave","WinProbability":0.66,"WinType":"Nominated"
    },
    {   
        "ID":1,"Nominee":"American Hustle","WinProbability":1.62,"WinType":"Nominated"
    },
    {
        "ID":2,"Nominee":"American Hustle","WinProbability":0.85,"WinType":"Win"
    },
    {
        "ID":3,"Nominee":"American Hustle","WinProbability":0.07,"WinType":"Win"
    },
    {   
        "ID":1,"Nominee":"Captain Phillips","WinProbability":2.70,"WinType":"Nominated"
    },
    {
        "ID":2,"Nominee":"Captain Phillips","WinProbability":0.00,"WinType":"Win"
    },
    {   
        "ID":3,"Nominee":"Captain Phillips","WinProbability":1.52,"WinType":"Win"
    }
]

我的 jquery 代码

$(function() {  
    $.getJSON('movie.json', function(data) {                

                var movie_name = [],
                    percentage = [];

                data.forEach(function(obj) {
                    if (movie_name.indexOf(obj.Nominee) == -1)
                        movie_name.push(obj.Nominee);

                    var lastIndex = movie_name.length - 1;       
                    if (typeof percentage[lastIndex] == "undefined")
                        percentage.push(obj.WinProbability);
                    else
                        percentage[lastIndex] += obj.WinProbability; 
                });

                console.log(movie_name);
                console.log(percentage);

            });
});

请帮助我如何做到这一点。我尝试为被提名人命名,但我不知道添加WinProbability 并计算百分比。

可以将数据更改为以下格式

    {
    "Win": [
        {
            "0": 3.47,
            "name": "12 Years a Slave"
        },{
            "0": 2.54,
            "name": "American Hustle"
        },{
            "0": 4.22,
            "name": "Captain Phillips"
        }
    ],
    "Nominated":[
        {
            "0": 1.2,
            "name": "12 Years a Slave"
        },{
            "0": 1,
            "name": "American Hustle"
        },{
            "0": 1,
            "name": "Captain Phillips"
        }
    ]
}

【问题讨论】:

  • 我认为你的计算是错误的。 12 Years a Slave 的总和应该是 3.47
  • @Mohammad 是的,我确实输入了虚拟值
  • 你有代码吗?
  • @Mohammad 我更新了我的问题和惰性 jquery 代码

标签: javascript jquery arrays json object


【解决方案1】:

您需要使用.indexOf() 检查数组中是否存在值。如果数组中不存在值,则使用.push() 将其插入。关于WinProbability,如果存在,增加它的值。

 var json = [
    {"ID":1,"Nominee":"12 Years a Slave","WinProbability":0.00,"WinType":"Win"},
    {"ID":2,"Nominee":"12 Years a Slave","WinProbability":2.81,"WinType":"Win"},
    {"ID":3,"Nominee":"12 Years a Slave","WinProbability":0.66,"WinType":"Nominated"},
    {"ID":1,"Nominee":"American Hustle","WinProbability":1.62,"WinType":"Nominated"},
    {"ID":2,"Nominee":"American Hustle","WinProbability":0.85,"WinType":"Win"},
    {"ID":3,"Nominee":"American Hustle","WinProbability":0.07,"WinType":"Win"},
    {"ID":1,"Nominee":"Captain Phillips","WinProbability":2.70,"WinType":"Nominated"},
    {"ID":2,"Nominee":"Captain Phillips","WinProbability":0.00,"WinType":"Win"},
    {"ID":3,"Nominee":"Captain Phillips","WinProbability":1.52,"WinType":"Win"}
];

var movie_name = [],
    percentage = [];
  
json.forEach(function(obj) {
    if (movie_name.indexOf(obj.Nominee) == -1)
        movie_name.push(obj.Nominee);
    
    var lastIndex = movie_name.length - 1;       
    if (typeof percentage[lastIndex] == "undefined")
        percentage.push(obj.WinProbability);
    else
        percentage[lastIndex] += obj.WinProbability; 
});

console.log(movie_name);
console.log(percentage);

【讨论】:

  • percentage not working get undefined Array [ undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, 还有 68 个……]
  • 但是我在 $.getJSON('movie.json', function(data) { your code }); 中使用了这段代码;
  • 您的 JSON 结果在 data 变量中。您是否将我代码中的 json 变量名更改为 data
  • 是的,我把 json 改成了数据
  • @dhanashri 如果它不起作用,可能是你的浏览器版本太旧了。
猜你喜欢
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多