获取javascript对象中的元素数,其中key = option

时间:2015-04-17 10:48:09

标签: javascript jquery object

这是一个javascript对象 如何获得条件 gallery =“Abstract” 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' }, 
};

6 个答案:

答案 0 :(得分:2)

如果要迭代对象:

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++;
  }
}

答案 1 :(得分:1)

只是一个示例输出。根据您的要求进行修改。



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




答案 2 :(得分:0)

试试这个:

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

答案 3 :(得分:0)

最直接的方法是使用本机函数:

// 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"

答案 4 :(得分:0)

尝试使用jquery grep。

将对象更改为数组,就像这样。

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

答案 5 :(得分:-1)

使用for循环迭代数组...

编辑:但我只是注意到它不是一个数组,但它是一个Javascript对象。由于直括号([]),数组是可识别的,而它有大括号({}) 因此,以下代码段不适用于此。

var count = 0;

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

这样的事情应该有效:

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