2017-05-22 2 views
0

Meine JSON sieht ungefähr so ​​aus:Schleife durch und halte Zählung jeden Element

[{ 
    "Name": "Test Post", 
    "Id": 123, 
    "ProductHandlingTypes": [{ 
     "Id": 1, 
     "Name": "Type 1" 
    }, 
    { 
     "Id": 2, 
     "Name": "Type 2" 
    }] 
}, 
{ 
    "Name": "Test Post 2", 
    "Id": 124, 
    "ProductHandlingTypes": [{ 
     "Id": 3, 
     "Name": "Type 3" 
    },  
    { 
     "Id": 1, 
     "Name": "Type 1" 
    }] 
}] 

Also, im Grunde, ich möchte in der Lage, durch alle von der Post Produkthandhabungsart Schleife sein und zu vergleichen, sie zu einer Liste von Produkthandhabungstypen und zu jeder Zeit, wenn es eine Übereinstimmung gibt, möchte ich darüber nachdenken, wie oft dieser bestimmte Typ gefunden/verwendet/gefunden wurde.

ich zur Zeit für die Spiele auf diese Weise bin Überprüfung, aber ich bin nicht sicher, wie eine Strichliste der einzelnen Warentypen zu halten:

postDataSource: new kendo.data.DataSource({ 
    transport: { 
     read: { 
      url: "/path/to/get/posts", 
      dataType: "json" 
     } 
    }, 
    schema: { 
     parse: function (response) { 
      // Get all product handling types 
      viewModel.productHandlingTypesDataSource.fetch(function() { 
       var types = this.data(); 
       // Loop through all of the posts 
       for (var i = 0; i < response.length; i++) { 
        // Loop through each product handling type for each post 
        for (var j = 0; j < response[i].ProductHandlingTypes.length; j++) { 
         // Loop through every product handling type 
         for (var k = 0; k < types.length; k++) { 
          // Check if product handling type matches the post's product handling type(s) 
          if (response[i].ProductHandlingTypes[j].Name == types[k].Name) { 
           // Keep track of how many times this name matches 
          } 
         } 
        } 
       } 
      }) 

      return response; 
     } 
    } 
}) 

ich einige Probleme gehabt haben versucht, dieses Problem in Worte zu fassen, so Wenn ich noch etwas klären muss, lass es mich wissen.

+1

Wie möchten Sie die Ausgabe aussehen? Möchten Sie etwas wie ein Objekt mit dem Produkttyp ids als Schlüssel und die Anzahl als Wert? – 4castle

+0

Mögliches Duplikat von [Anzahl der Objektwerte zählen] (https://stackoverflow.com/questions/29957390/counting-occurrences-of-object-values) –

Antwort

3

können Sie reduce wie folgt verwenden:

var a = [{"Name":"TestPost","Id":123,"ProductHandlingTypes":[{"Id":1,"Name":"Type1"},{"Id":2,"Name":"Type2"}]},{"Name":"TestPost2","Id":124,"ProductHandlingTypes":[{"Id":3,"Name":"Type3"},{"Id":1,"Name":"Type1"}]}]; 
 

 
var b = a.reduce((acc, cur) => { 
 
    cur.ProductHandlingTypes.map(({Name}) => Name).forEach(n => acc[n] = (acc[n] || 0) + 1); 
 
    return acc; 
 
}, {}) 
 

 
console.log(b)

Es Array und Schritten Schleifen durch Type n Werte oder schafft sie sie nicht existieren ist.

+0

Genau das habe ich gesucht. Vielen Dank! – Quiver

Verwandte Themen