2016-07-24 57 views
-4

我在该json文件中有一个json值三个电影的名字。 JSON数据是动态数据。我想计算在WinProbability字段上的百分比。我想输出如下如何获取json的唯一值并在数组中求和另一个值?

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" 
     } 
    ] 
} 
+0

我觉得你的计算是错误的。 '12年奴隶'的总和应该是'3.47' – Mohammad

+0

@Mhamhammad是的,我真的把虚拟值 –

+0

你有任何代码? – Mohammad

回答

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);

+0

百分比不工作得到undefinde 数组[undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,68 more ...] –

+0

它在snippet中正常工作。 – Mohammad

+0

但我在$ .getJSON('movie.json',function(data){your code})中使用这段代码; –

相关问题