2016-07-26 12 views
0

Wie kann ich Vorkommen von, sagen wir einen Namen, in JSON Datei zählen. Ich möchte wissen, wie oft, sagt Namen "MICO", erscheint in JSON Datei und ich möchte es in einer Variablen wie var mico=2; speichern. Meine JSON Datei sieht wie folgt aus:Count Name Vorkommen in JSON-Datei

[ 
{ 
    "igralec1": "LEON", 
    "datum": "Cetrtek - 21. Julij 2016", 
    "set1": "4", 
    "set2": "6", 
    "set3": "6", 
    "set4": "-", 
    "set5": "-", 
    "igralec2": "MICO", 
    "set21": "6", 
    "set22": "1", 
    "set23": "4", 
    "set24": "-", 
    "set25": "-" 
}, 
{ 
    "igralec1": "MICO", 
    "datum": "Ponedeljek - 11. Julij 2016", 
    "set1": "6", 
    "set2": "6", 
    "set3": "6", 
    "set4": "-", 
    "set5": "-", 
    "igralec2": "PERO", 
    "set21": "2", 
    "set22": "1", 
    "set23": "3", 
    "set24": "-", 
    "set25": "-" 
    } 
] 
+0

der Eingang immer eine Reihe von flachen Objekten, oder könnte es Objekte verschachtelt werden? Und sind die Namen der relevanten Immobilien im Voraus bekannt? (In Ihrem Beispiel erscheint der Name "MICO" nur in den Eigenschaften "igralec1" und "igralec2".) – nnnnnn

+0

Objekte sind immer die gleichen wie diese beiden. Ich fülle die Daten aus dem PHP-Formular. – dukaric1991

+0

Alle Namen sind im Voraus bekannt. Und die Namen können nur in "igralec1" und "igralec2" sein. – dukaric1991

Antwort

0

Unter der Annahme, dass die JSON (irgendwie) in eine Variable json genannt abgerufen wurde, würden Sie es analysieren müssen, um ein Array zu erhalten:

var array = JSON.parse(json); 

Obwohl, wenn Sie haben eine jQuery Ajax-Methode verwendet, um sie zu erhalten. jQuery wird sie wahrscheinlich für Sie analysieren, damit Sie diesen Schritt überspringen können. Wie auch immer, ist, die geparsten Daten annimmt (eine oder andere Weise) in einem variablen array genannt:

function searchForWord(word, array) { 
    return array.reduce(function(s, o) { 
    if (o.igralec1 === word) s++; 
    if (o.igralec2 === word) s++; 
    return s; 
    }, 0); 
} 

var micoCount = searchForWord("MICO", array); // 2 
var peroCount = searchForWord("PERO", array); // 1 

Demo: https://jsfiddle.net/rzmada6p/1/

I verwendet, um zwei if Aussagen für den Fall sowohl die igralec1 und igralec2 Objekte im selben Objekt könnte das Wort enthalten, nach dem Sie suchen. Wenn Sie weiß, dass es immer nur in einem bestimmten Objekt eine oder die andere Eigenschaft sein, dann können Sie es tun, mit einem if und einem oder:

if (o.igralec1 === searchWord || o.igralec2 === searchWord) s++; 

Weiterführende Literatur: the array .reduce() method.

0

Die Lösung RegExp Konstruktor und String.match Funktion:

var jsonData= '[{"igralec1": "LEON","datum":"Cetrtek - 21. Julij 2016","set1": "4","set2": "6","set3": "6","set4": "-","set5": "-","igralec2": "MICO","set21": "6","set22": "1","set23": "4","set24": "-","set25": "-"},{"igralec1": "MICO","datum": "Ponedeljek - 11. Julij 2016","set1": "6","set2": "6","set3": "6","set4": "-","set5": "-","igralec2": "PERO","set21": "2","set22": "1","set23": "3","set24": "-","set25": "-"}];'; 

var getCount = function(jsonData, str){ 
     var re = new RegExp('\"' + str +'\"', "ig"); 
     return jsonData.match(re).length; 
    }; 

console.log(getCount(jsonData, "MICO")); // 2 
console.log(getCount(jsonData, "LEON")); // 1 
0
function count(data, entry) { 
    return data 
       .map(obj => 
        Object 
         .keys(obj) 
         .map(key => obj[key]) 
         .filter(item => item === entry) 
         .length) 
       .reduce((res, val) => res + val, 0); 
} 

Verbrauch:

const data = []; // your array here 
console.log(count(data, 'MICO')); // 2 

Wenn Sie wissen Schlüssel:

function count(data, keys, entry) { 
    return data1 
       .reduce((res, obj) => 
        keys.forEach(key => obj[key] === entry && res++) || res, 0); 
} 

Verbrauch:

const data = []; // your array here 
console.log(count(data, ['igralec1', 'igralec2'], 'MICO')); // 2 

Beachten Sie, dass es es2015 verwendet.

0

Sie können die Jquery-Grep-Funktion verwenden. Der Beispielcode wird wie folgt aussehen. Ich bin Ihr JSON Array-Name unter der Annahme, arr Working code

var array = [ 
{ 
    "igralec1": "LEON", 
    "datum": "Cetrtek - 21. Julij 2016", 
    "set1": "4", 
    "set2": "6", 
    "set3": "6", 
    "set4": "-", 
    "set5": "-", 
    "igralec2": "MICO", 
    "set21": "6", 
    "set22": "1", 
    "set23": "4", 
    "set24": "-", 
    "set25": "-" 
}, 
{ 
    "igralec1": "MICO", 
    "datum": "Ponedeljek - 11. Julij 2016", 
    "set1": "6", 
    "set2": "6", 
    "set3": "6", 
    "set4": "-", 
    "set5": "-", 
    "igralec2": "PERO", 
    "set21": "2", 
    "set22": "1", 
    "set23": "3", 
    "set24": "-", 
    "set25": "-" 
    } 
]; 
var MICO=0; 
var objJson = jQuery.grep(array, function(n, i) {  
     if(n.igralec1=="MICO" || n.igralec2 =="MICO"){ 
      MICO++; 
     } 
    }); 
    alert(MICO); 
+0

Was, wenn ich Sätze für MICO zählen möchte. In meinem Fall ist hier die Summe der Micosätze mico = 29 (6 + 4 + 1 + 6 + 6 + 6). Und danke, Jungs, dass eure Lösungen funktionieren! – dukaric1991