Ich habe eine Zeichenfolge namens "Produkte", wobei jedes Objekt mehrere Felder hat, wie folgt:

var prods = JSON.stringify ({"products": [

    {
        'prodname': 'Linkedin',
        'oem': 'Linkedin',
        'snippet': 'snippet goes here',
        'linkto': 'http://www.linkedin.com',
        'imagesource': 'resources/images/apps/linkedin.png',
        'category' : 'one'
    },
    {
        'prodname': 'Mozy',
        'oem': 'Mozy',
        'snippet': 'Mozy is the world’s most trusted online backup service for consumers and businesses.',
        'linkto': 'This is the app page links.',
        'imagesource': 'resources/images/apps/mozy.png',
        'category' : 'two'
    },
    {
        'prodname': 'Amazon',
        'oem': 'Amazon',
        'snippet': 'snippet goes here',
        'linkto': 'This is the app page links.',
        'imagesource': 'resources/images/apps/amazon.png',
        'category' : 'one'
    },

... und fährt so fort.

Ich habe ein Skript geschrieben, das HTML-Elemente auf der Seite erstellt und sie mit Daten aus der Zeichenfolge füllt, wodurch ein Look vom Typ App-Store erstellt wird - was gut funktioniert. Das Problem, das ich habe, ist, dass ich nur Apps aus einer bestimmten Kategorie gleichzeitig anzeigen möchte, um beispielsweise alle Objekte in der Zeichenfolge auswählen zu können, die eine 'Kategorie' von 'Eins' haben.

So wie es aussieht, sieht der Teil meines Codes, der die Elemente auswählt, folgendermaßen aus:

var prodobjects = JSON.parse(prods);

function popcatone(){

  var catnum =  prodobjects.products.category;
  var numberprods = catnum='one'.length;

  var looptimes = 0;
  if (numberprods > 5 & numberprods != 0) {
    looptimes = 5;
  }
  else {
    looptimes = numberprods;
  }
  for (i=0; i < looptimes; i++)

  {  //start loop

var imgsrc =  prodobjects.products[i].imagesource;
var h3text = prodobjects.products[i].prodname;
var oemtext = prodobjects.products[i].oem;
var descriptiontext = prodobjects.products[i].snippet;
var productlink = prodobjects.products[i].linkto;

... und dann werden die Daten in HTML-Elementen verteilt. Wie Sie sehen können, kann der Code derzeit feststellen, wie viele Objekte in der Zeichenfolge eine 'Kategorie' von 'Eins' haben, und diese verwenden, um die Häufigkeit zu begrenzen, mit der der Code wiederholt wird, wenn weniger als 5 Ergebnisse vorliegen, aber ich kann es einfach Finden Sie nicht heraus, wie Sie die Objekte mit der Kategorie "Eins" auswählen können. So wie es aussieht, sieht der Code die Anzahl der Ergebnisse korrekt und rendert zwar die richtige Anzahl von Apps auf der Seite, aber die Ergebnisse sind einfach in einer linearen Reihenfolge und berücksichtigen die Kategorie nicht.

Ich hatte ein Problem damit, eine Geige dafür zu machen, aber da das CSS, das in es eingespeist wird, ziemlich kompliziert ist, konnte ich es nicht dazu bringen, das Verhalten richtig darzustellen. Entschuldigung für die langwierige Frage und Antworten oder Vorschläge werden sehr geschätzt.

Ich bin wirklich nicht auf der Suche nach jemandem, der meine Arbeit für mich erledigt. Wenn mich jemand in die richtige Richtung weisen kann, wie das Objekt anhand des Werts eines der Felder ausgewählt wird, bin ich froh, den Rest selbst herauszufinden !

Vielen Dank für Ihre Geduld und nur für die Aufzeichnung verwende ich jquery 1.10.2

1
Visiophobia 4 Dez. 2013 im 20:34

3 Antworten

Beste Antwort

Wenn Sie dies nicht benötigen, um in älteren Browsern * zu arbeiten, würde ich filter:

function getData(array, type, val) {
  return array.filter(function (el) {
    return el[type] === val;
  });
}

var data = getData(products, 'category', 'one');

Geige

* Polyfills sind verfügbar.

2
Andy 4 Dez. 2013 im 16:59

Diese Linie:

var numberprods = catnum='one'.length;

Setzt sowohl "catnum" als auch "numberprods" auf 3.

Die Zeile davor:

var catnum =  prodobjects.products.category;

Setzt "catnum" immer auf undefined, da die Eigenschaft "products" ein Array für ihren Wert hat und das Array keine "category" -Eigenschaft hat. Das ist jedoch wegen der nächsten Zeile nicht besonders wichtig.

Somit sind "Looptimes" immer 3.

Zusammenfassend kann der Code nicht "feststellen, wie viele Objekte in der Zeichenfolge eine 'Kategorie' von 'Eins' haben".

1
Pointy 4 Dez. 2013 im 16:37

Versuchen:

function popcatone(){
    var looptimes = prodobjects.length;
    for (i=0; i < looptimes; i++){
        if(prodobjects.products[i].category == "one"){
            var imgsrc =  prodobjects.products[i].imagesource;
            var h3text = prodobjects.products[i].prodname;
            var oemtext = prodobjects.products[i].oem;
            var descriptiontext = prodobjects.products[i].snippet;
            var productlink = prodobjects.products[i].linkto;
        }
    }
}
1
Hiral 4 Dez. 2013 im 16:39