我返回以下JSON以填充高级别http://www.highcharts.com/
[["Graz", 5.0],["Rio de Janeiro", 3.0],["Bräcke", 2.0],["Campinas", 2.0],["Colchester", 2.0],["Cunewalde", 2.0],["Lille", 2.0],["London", 2.0],["Charleroi", 1.0],["Caracas", 1.0],["Butte", 1.0],["Buenos Aires", 1.0]]
而不是再次重新查询数据库。我如何获得返回的总值?即在这种情况下24。 我仍然习惯了JSON,所以非常感谢任何人都能给予的帮助......谢谢
答案 0 :(得分:5)
循环搜索结果并将其添加...
var data = JSON.parse('[["Graz", 5.0],["Rio de Janeiro", 3.0],["Bräcke", 2.0],["Campinas", 2.0],["Colchester", 2.0],["Cunewalde", 2.0],["Lille", 2.0],["London", 2.0],["Charleroi", 1.0],["Caracas", 1.0],["Butte", 1.0],["Buenos Aires", 1.0]]');
var total = 0;
for (var i = 0; i < data.length; i++) {
total += data[i][1];
}
答案 1 :(得分:1)
为了完成Jake的优秀答案,我想指出,由于问题标有jquery
标记,另一种方法可能是使用$.each
:
function sumJSON(str) {
var data = JSON.parse(str),
total = 0;
$.each(data, function(index, value) {
total += value[1];
});
return total;
}
$(document).ready(function() {
var string = '[["Graz", 5.0],["Rio de Janeiro", 3.0],["Bräcke", 2.0],["Campinas", 2.0],["Colchester", 2.0],["Cunewalde", 2.0],["Lille", 2.0],["London", 2.0],["Charleroi", 1.0],["Caracas", 1.0],["Butte", 1.0],["Buenos Aires", 1.0]]';
$(".count").text( sumJSON(string) );
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p>Total: <span class="count"></span>
</p>
答案 2 :(得分:0)
这不是一个性感的答案,但它确实有效。注意,因为它使用.length,它只适用于数组:
var
jsonArr = [["Graz", 5.0],["Rio de Janeiro", 3.0],["Bräcke",2.0],["Campinas", 2.0],
["Colchester", 2.0],["Cunewalde", 2.0],["Lille", 2.0],["London", 2.0],
["Charleroi", 1.0],["Caracas", 1.0],["Butte", 1.0],["Buenos Aires", 1.0]],
total = 0;
for (var i in jsonArr) {
total += jsonArr[i].length;
}
console.log(total); // 24
答案 3 :(得分:0)
虽然看起来你已经得到了回复,但我会建议所有可能格式的通用解决方案,不仅是这个具有一级数组嵌套的解决方案,而且甚至不考虑对象或其他什么。以下代码将递归迭代查找值的对象和数组:
function isArray(obj) {
return !!(obj.length) && ((obj + "") !== obj);
}
function isObject(obj) {
return obj.toString() === "[object Object]";
}
function getKeys(obj) {
var keys;
if (isArray(obj)) {
keys = [];
for (var i = 0; i < obj.length; i++) {
keys.push(i);
}
} else {
keys = Object.keys(obj)
}
return keys;
}
function deepLength(arr) {
var totalValues = 0;
var keys = getKeys(arr);
for (var i = 0; i < keys.length; i++) {
if (isArray(arr[keys[i]]) || isObject(arr[keys[i]])) {
totalValues += deepLength(arr[keys[i]])
} else {
totalValues++;
}
}
return totalValues;
}
我只是没有花费太多时间使用isArray和isObject函数,我建议你使用lodash或者下划线,或者其他什么,但绝对不是这些。
答案 4 :(得分:0)
因为问题有一个jq
标签,所以它在......:
echo "[[\"Graz\",5],[\"Rio de Janeiro\",3],[\"Bräcke\",2],[\"Campinas\",2],[\"Colchester\",2],[\"Cunewalde\",2],[\"Lille\",2],[\"London\",2],[\"Charleroi\",1],[\"Caracas\",1],[\"Butte\",1],[\"Buenos Aires\",1]]" | jq '[.[][1]] | add'