0

Having this variable:

var pico = {
        "dc:title": 0,
        "dc:identifier": 0,
        "dc:subject": 0,
        "dc:type": 0,
        "pico:preview": 0,
        "dc:isReferencedBy": 0,
        "dcterms:license": 0,
        "pico:licenseMetadata": 0,

    };  

and this json response:

{ 
   '$':{ 
      'xmlns:pico':'http://purl.org/pico/1.0/',
      'xmlns:dc':'http://purl.org/dc/elements/1.1/',
      'xmlns:dcterms':'http://purl.org/dc/terms/',
      'xmlns:xsi':'http://www.w3.org/2001/XMLSchema-instance',
      'xsi:schemaLocation':'http://purl.org/pico/1.0/    http://purl.org/pico/1.0/pico.xsd'
   },
   'dc:description':{ 
      _:'L’antica porta urbica, incorporata negli edifici circostanti, fu ridotta a un solo fornice. Sul lato interno, Madonna col Bambino e santi, affresco del sec. XIV.',
      '$':{ 
         'xml:lang':'it'
      }
   },
   'dc:identifier':'57926',
   'dc:subject':{ 
      _:'http://culturaitalia.it/pico/thesaurus/4.0#mura_fortificazioni',
      '$':{ 
         'xsi:type':'pico:Thesaurus'
      }
   },
   'dc:title':{ 
      _:'Arco delle due Porte, Siena',
      '$':{ 
         'xml:lang':'it'
      }
   },
   'dc:type':{ 
      _:'PhysicalObject',
      '$':{ 
         'xsi:type':'dcterms:DCMIType'
      }
   },
   'dcterms:isReferencedBy':{ 
      _:'http://www.touringclub.com/monumento/toscana/siena/arco-delle-due-porte.aspx',
      '$':{ 
         'xsi:type':'dcterms:URI'
      }
   },
   'dcterms:spatial':{ 
      _:'PlaceName=via Stalloreggi ; city=Siena ; province=SI',
      '$':{ 
         'xsi:type':'pico:PostalAddress'
      }
   }
}

If a property from the variable exist also in the JSON response I would assign to the property the value 1, if not exist the value 0.

Then I would divide the obtained sum by the expected value 8 in order to have the ratio of the filled fields.

I made this:

for (var key in item.metadata["pico:record"]) {
            pico[key] = pico[key] || 1;
            pico[key] != pico[key] || 0;
        }

...

let somma = 0;
        for (var property in pico) {
            console.log(property);
            if (pico.hasOwnProperty(property)) {
                somma += pico[property];
            }
        }
        console.log(somma / 8);

However, as result I'm having 1 instead of 0.72. This because the script I made counts the properties instead of the values.

Then I approached the problem according to this issue. Again, I'm having 8 as sum.

Suggestions?

Pelide
  • 468
  • 1
  • 4
  • 19

1 Answers1

1

You should be looping over the properties in pico, not the JSON response. And your logical operators are just totally wrong.

var somma = 0;
for (var key in pico) {
    var found = item.metadata["pico:record"].hasOwnProperty(key) ? 1: 0;
    pico[key] = found;
    somma += found;
}
console.log(somma/8);
Barmar
  • 741,623
  • 53
  • 500
  • 612