2012-01-12 6 views
1

비슷한 개체가 포함 된 개체가 있습니다. 객체 속성 (상태)이 지정된 값 (true) 인 객체에 대해서만 객체 수를 얻고 싶습니다. 예를 들어, 아래의 객체의 수는 3조건에 따라 개체 수 얻기

{ 
6:{"name":"Mary", "status":true}, 
2:{"name":"Mike", "status":true}, 
1:{"name":"John", "status":false}, 
4:{"name":"Mark", "status":true}, 
5:{"name":"Jane", "status":false} 
} 

감사

특히
+2

화살표로 클릭하여 흐릿한 질문과 답변을 upvote하고 옆에있는 초벌 체크 표시를 클릭하여 문제를 해결할 수 있습니다. 이것은 Stackoverflow를 구성하는 데 도움이되며 모두가 행복하게 만듭니다. – hugomg

+0

그건 그렇고, 당신은 여기에서 무엇을 시도 했습니까? – hugomg

+0

나는 다음과 같이 해냈다. 그러나 효과가있다. 그러나 나는 더 나은 해결책이있을 것으로 기대한다. 뒤죽박죽 된 게시물을 유감스럽게 생각합니다. var count = 0; for (myObject의 var o) {count = count + myObject [o] .status;} – user1032531

답변

1

는 :

function count_matches(array, func) { 
    var i = 0; 
    var count = 0; 
    while (i < array.length) { 
     if (func(array[i])) count += 1; 
     i += 1; 
    } 
    return count; 
} 

function status_true(obj) { 
    return obj['status'] == true; 
} 

count_matches(array, status_true); 
:

var i = 0; 
var count = 0; 
while (i < array.length) { 
    if (array[i]['status'] == true) count += 1; 
    i += 1; 
} 
더 일반적으로

, 당신은 몇 가지 프로그래밍 기능을 사용할 수 있습니다

위의 발췌 문장 똑같은 일을하지만 후자는 좀 더 유연하고 잠재적으로 더 깔끔합니다.

+0

커플 문자를 저장하려면 i ++을 수행 할 수도 있습니다. :디 – Paul

0

배열을 반복하고 status 속성이 true 인 횟수를 계산합니다.

var count = 0; 
for (var i = 0; i < yourArray.length; i++){ 
    var current = yourArray[i]; 
    if (current.status) count++ 
} 
0
(질문에 게시 간단한 예를 들어 너무 많은 수 있습니다) 일 것이다

LinqJs -

http://linqjs.codeplex.com/

var jsonArray = [ 
{ "user": { "id": 100, "screen_name": "d_linq" }, "text": "to objects" }, 
{ "user": { "id": 130, "screen_name": "c_bill" }, "text": "g" }, 
{ "user": { "id": 155, "screen_name": "b_mskk" }, "text": "kabushiki kaisha" }, 
{ "user": { "id": 301, "screen_name": "a_xbox" }, "text": "halo reach" }] 


// ["b_mskk:kabushiki kaisha", "c_bill:g", "d_linq:to objects"] 
var queryResult = Enumerable.From(jsonArray) 
.Where(function (x) { return x.user.id < 200 }) 
.OrderBy(function (x) { return x.user.screen_name }) 
.Select(function (x) { return x.user.screen_name + ':' + x.text }) 
.ToArray(); 

// shortcut! string lambda selector 
var queryResult2 = Enumerable.From(jsonArray) 
.Where("$.user.id < 200") 
.OrderBy("$.user.screen_name") 
.Select("$.user.screen_name + ':' + $.text") 
.ToArray(); 
0
var obj = { 
6:{"name":"Mary", "status":true}, 
2:{"name":"Mike", "status":true}, 
1:{"name":"John", "status":false}, 
4:{"name":"Mark", "status":true}, 
5:{"name":"Jane", "status":false} 
}; 
var count = 0; 
for (var prop in obj) { 
    if(obj[prop].status === true){ 
    count += 1; 
    } 
} 
console.log("Output: "+count); 
$("#debug").text("Output: "+count); 

라이브 데모 http://jsbin.com/uwucid/2/edit

3

나는 당신을 인식 객체가 아니라 배열을 반복하고있다. 다른 것들은 배열에 대한 솔루션을 제공합니다. array.reduce가있는 솔루션을 조정합니다. 가장 현대적인 브라우저에서 작동합니다 (IE9 +)

var myArray = [ 
{"name":"Mary", "status":true}, 
{"name":"Mike", "status":true}, 
{"name":"John", "status":false}, 
{"name":"Mark", "status":true}, 
{"name":"Jane", "status":false} 
]; 

var result = myArray.reduce(function(previousValue, currentObject){ 
    return previousValue + (currentObject.status ? 1: 0); 
}, 0); 
관련 문제