Javascript 基于条件获取对象计数
我有一个包含一堆相似对象的对象。我只想获得对象属性(status)具有给定值(true)的对象的计数。例如,下面对象的计数为3Javascript 基于条件获取对象计数,javascript,Javascript,我有一个包含一堆相似对象的对象。我只想获得对象属性(status)具有给定值(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} } 特别感谢:
{
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 i = 0;
var count = 0;
while (i < array.length) {
if (array[i]['status'] == true) count += 1;
i += 1;
}
var i=0;
var计数=0;
while(i
更一般地说,您可以使用一些函数式编程:
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);
函数计数\u匹配(数组、函数){
var i=0;
var计数=0;
while(i
上面的代码片段做了同样的事情,但后者更灵活/可能更整洁。只需在数组上循环,并计算status属性为true的次数
var count = 0;
for (var i = 0; i < yourArray.length; i++){
var current = yourArray[i];
if (current.status) count++
}
var计数=0;
for(var i=0;i
LinqJs可以工作(对于问题中发布的简单示例来说可能太多了)-
var jsonArray=[
{“user”:{“id”:100,“screen_name”:“d_linq”},“text”:“to objects”},
{“用户”:{“id”:130,“屏幕名称”:“c_bill”},“文本”:“g”},
{“user”:{“id”:155,“screen_name”:“b_mskk”},“text”:“kabushiki kaisha”},
{“用户”:{“id”:301,“屏幕名称”:“a_xbox”},“文本”:“halo reach”}]
//[“b_mskk:kabushiki kaisha”、“c_bill:g”、“d_linq:to objects”]
var queryResult=Enumerable.From(jsonArray)
.Where(函数(x){return x.user.id<200})
.OrderBy(函数(x){return x.user.screen_name})
.Select(函数(x){return x.user.screen_name+':'+x.text})
.ToArray();
//捷径!字符串lambda选择器
var queryResult2=Enumerable.From(jsonArray)
.Where(“$.user.id<200”)
.OrderBy(“$.user.screen\u name”)
。选择(“$.user.screen_name+”:“++$.text”)
.ToArray();
live demo我知道您正在迭代一个对象,而不是一个数组,但由于其他对象提供了数组的解决方案,我用array.reduce重新确认了一个解决方案。适用于大多数现代浏览器(IE9+)
您可以向上投票(通过点击箭头),也可以通过点击旁边的绿色复选标记接受解决问题的答案。这有助于组织Stackoverflow,也让每个人都很开心。顺便问一下,你在这里尝试了什么?我做了以下几点,它很有效,但我希望有更好的解决方案。很抱歉把邮件弄混了。var计数=0;对于(myObject中的var o){count=count+myObject[o].status;}您还可以执行i++,以保存两个字符:D
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();
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);
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);