Get count of elements in javascript object where key=option

旧街凉风 提交于 2020-01-06 07:27:32

问题


This is a javascript object.
How can I get the count of elements with 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' }, 
};

回答1:


If you want to iterate over the 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:


Just a sample output. Modify 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);



回答3:


Try this:

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);



回答4:


The most straightforward way is using native 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"



回答5:


Try use jquery grep.

Change your object to an array do it, 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




回答6:


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

EDIT: but I just notice that it's not an array, but it's a Javascript object. Arrays are recognizable because of the straight brackets ([]), while this has curly brackets ({}) So the below code snippet 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
    }
}


来源:https://stackoverflow.com/questions/29697130/get-count-of-elements-in-javascript-object-where-key-option

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!