0

次の 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に慣れているので、誰かができる助けをいただければ幸いです...ありがとう

4

5 に答える 5

6

結果をループして合計します...

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];
}
于 2014-12-23T23:26:13.670 に答える
1

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>

于 2014-12-23T23:38:10.260 に答える
0

すでに回答が得られているようですが、1 レベルの配列のネストがあり、オブジェクトなどを考慮していないこの形式だけでなく、考えられるすべての形式の一般的な解決策をお勧めします。次のコードは、値を探してオブジェクトと配列を再帰的に繰り返します。

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 や underscore などの関数を使用することをお勧めしますが、これらは絶対に使用しないでください。

于 2014-12-23T23:40:21.097 に答える
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
于 2014-12-23T23:29:03.963 に答える