2015-04-17 58 views
0

这是一个javascript对象。
我怎样才能得到条件的元素数gallery =“摘要”gallery =“游戏”获取javascript对象中元素的数量,其中key = option

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

这是一个JavaScript ** **对象,而不是阵列。 – VisioN

+0

它是一个JavaScript对象而不是数组。 –

+0

哦!我为此感到抱歉。谢谢@VisioN和Vigneswaran Marimuthu –

回答

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

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

请检查问题。它是JavaScript对象。 –

+0

感谢您指出了这一点。我已经更新了我的答案 –

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

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