Get the number of elements in a javascript object, where key = option

This is a javascript object.
How to get the number of elements with the condition gallery = "Abstract" and gallery = "Game" .

window.paintings = { 1: { id: 1, name: 'Abstract 1', gallery: 'Abstract', src:'Image64.jpg' }, 2: { id: 2, name: 'Abstract 2', gallery: 'Abstract', src:'Image65.jpg' }, 3: { id: 3, name: 'Abstract 3', gallery: 'Abstract', src:'Image66.jpg' }, 4: { id: 1, name: 'Game 1', gallery: 'Game', src:'Image66.jpg' }, 5: { id: 2, name: 'Game 2', gallery: 'Game', src:'Image66.jpg' }, }; 
0
source share
6 answers

If you want to iterate over an object:

 p = { 1: { id: 1, name: 'Abstract 1', gallery: 'Abstract', src:'Image64.jpg' }, 2: { id: 2, name: 'Abstract 2', gallery: 'Abstract', src:'Image65.jpg' }, 3: { id: 3, name: 'Abstract 3', gallery: 'Abstract', src:'Image66.jpg' }, 4: { id: 1, name: 'Game 1', gallery: 'Gme', src:'Image66.jpg' }, 5: { id: 2, name: 'Game 2', gallery: 'Game', src:'Image66.jpg' }, }; var count = 0; for (var key in p) { if (p.hasOwnProperty(key)) { if(p[key].gallery === "Abstract" || p[key].gallery === "Game") count++; } } 
+2
source

Just a sample. Change it as per your requirement.

 var paintings = { 1: { id: 1, name: 'Abstract 1', gallery: 'Abstract', src:'Image64.jpg' }, 2: { id: 2, name: 'Abstract 2', gallery: 'Abstract', src:'Image65.jpg' }, 3: { id: 3, name: 'Abstract 3', gallery: 'Abstract', src:'Image66.jpg' }, 4: { id: 1, name: 'Game 1', gallery: 'Game', src:'Image66.jpg' }, 5: { id: 2, name: 'Game 2', gallery: 'Game', src:'Image66.jpg' }, }; var count = 0; for (var property in paintings) { if (paintings.hasOwnProperty(property)) { if (paintings[property]['gallery'] == 'Abstract' || paintings[property]['gallery'] == 'Game' ) { count++; } } } alert(count); 
+1
source

Try the following:

 var AbstractCount=0; var GameCount=0; window.paintings = { 1: { id: 1, name: 'Abstract 1', gallery: 'Abstract', src:'Image64.jpg' }, 2: { id: 2, name: 'Abstract 2', gallery: 'Abstract', src:'Image65.jpg' }, 3: { id: 3, name: 'Abstract 3', gallery: 'Abstract', src:'Image66.jpg' }, 4: { id: 1, name: 'Game 1', gallery: 'Game', src:'Image66.jpg' }, 5: { id: 2, name: 'Game 2', gallery: 'Game', src:'Image66.jpg' }, }; for(keys in window.paintings){ if(window.paintings[keys].gallery == 'Abstract'){ AbstractCount++; } else if(window.paintings[keys].gallery == 'Game'){ GameCount++; } } alert(AbstractCount); alert(GameCount); 
0
source

The easiest way is to use your own functions:

 // This is a reusable function to count elements in object // based on some function var countElements = function(obj, condition) { return Object.keys(obj).filter(function(key) { if (obj.hasOwnProperty(key)) { var item = obj[key]; return condition(obj[key]); } }).length; }; var count = countElements(window.paintings, function(item) { // Return true from here if you want to count particular element return item.gallery == 'Abstract' || item.foo == 'Game'; // you can add more conditions here. }); alert(count); // Alerts "3" 
0
source

Try using jquery grep.

Change your object to an array like this.

 var arr = [ { id: 1, name: 'Abstract 1', gallery: 'Abstract', src:'Image64.jpg' }, { id: 2, name: 'Abstract 2', gallery: 'Abstract', src:'Image65.jpg' }, { id: 3, name: 'Abstract 3', gallery: 'Abstract', src:'Image66.jpg' }, { id: 1, name: 'Game 1', gallery: 'Game', src:'Image66.jpg' }, { id: 2, name: 'Game 2', gallery: 'Game', src:'Image66.jpg' } ]; var x = $.grep(arr, function( n, i ) { return (n.gallery == 'Abstract' || n.gallery == 'Game'); }); $("#result").html(x.length); 

Jsfiddle here

0
source

Use a for loop to iterate over an array ...

EDIT: but I just notice that this is not an array, but a Javascript object. Arrays are recognized due to the brackets ([]), while it has curly braces ({}) Thus, the code snippet below will NOT work on this.

 var count = 0; for (var i = 0; i < window.paintings.length; i++) { var item = window.paintings[i]; if (...) { count = count + 1; } } 

Something like this should work:

 for (var property in object) { if (object.hasOwnProperty(property)) { // do your logic here } } 
-1
source

Source: https://habr.com/ru/post/891775/


All Articles