我有一个包含属性id
和value
var arrayObj= [
{"id": 1, "value": true},
{"id": 2, "value": false},
{"id": 3, "value": true}
]
我需要获取具有属性true
/ false
的对象的数量。
我正在使用Array.prototype.every()
,但我的逻辑并没有像预期的那样正常工作。谁能告诉我这里我做错了什么?我没有显示计数
function checkIfFalse(value, index, ar) {
document.write(value + " ");
if (value === false)
return true;
else
return false;
}
if (arrayObj.every(checkIfFalse)) {
console.log("all are false");
}else {
console.log("all are true");
}
答案 0 :(得分:3)
为什么不使用.filter
?
// Your array object
var arrayObj = [
{"id": 1, "value": true},
{"id": 2, "value": false},
{"id": 3, "value": true}
]
// Count true items
var count = arrayObj.filter(function(s) { return s.value; }).length;
// Result
console.log("#True: " + count)

答案 1 :(得分:2)
你可以这样做
int falses=0,trues=0;
for(i=0;i<arrayObj.length;i++) {
if(arrayObj[i].value) {
trues++;
} else {
falses++;
}
}
console.log('Trues: '+trues+' Falses:'+falses);
答案 2 :(得分:2)
var arrayObj = [{
"id": 1,
"value": true
}, {
"id": 2,
"value": false
}, {
"id": 3,
"value": true
}];
var trueCount = falseCount = 0;
arrayObj.forEach(function (object) {
object.value === true ? trueCount++ : falseCount++;
});
console.log(trueCount, falseCount);
答案 3 :(得分:1)
.every()
函数期望传递一个函数,该函数将测试数组的每个项并返回true或false。你会想要这样的东西:
if (arrayObj.every(checkIfFalse)) {
console.log("all are false");
}
function checkIfFalse(value, index, ar) {
console.log('checking if' + index + ' from array is false');
return value.value == false;
}
因此,arrayObj.every(checkIfFalse)
将返回false
,因为并非所有项都为假
.every()
用于检查数组中的每个项目是否满足特定条件,听起来您想要计算满足特定条件的项目数。如果不迭代遍历数组的每个项目并进行检查,就无法做到这一点。如果你只是编写自己的for循环,这将是最好的。例如:
function countItemsTrue(arry){
var result = 0;
for(x = 1; arry.length >= x; x++){
if(arry[x].value === true){
result++;
}
}
return result;
}
然后你会做
var count = CountItemsTrue(arrayObj);
当它写成这样的时候你可以很容易地检查是否所有都是真的,而不是通过检查全部迭代:
var allTrue = count == arrayObj.length;
答案 4 :(得分:1)
inMph dv
答案 5 :(得分:1)
我不完全确定你真正想要的是什么:你多次声明要计算有多少项false
值,但你对代码的讨论让它听起来像你只想要知道他们所有是否有错value
属性。
如果它是您第一次(假值的实际数量),您可以使用reduce
获取该值,如下所示:
var arrayObj = [
{ "id": 1, "value": true },
{ "id": 2, "value": false },
{ "id": 3, "value": true }
];
var numFalse = arrayObj.reduce(function(count, item) {
return count + (item["value"] === false ? 1 : 0);
}, 0);
如果是第二个(您想知道所有值是否为false),或者您想要检查是否只有部分条目有false
value
条目,你可以实现如下:
var allFalse = numFalse == data.length,
noneFalse = numFalse == 0,
someFalse = numFalse > 0 && numFalse < data.length;
如果您不熟悉reduce
,则其工作方式如下:
reduce
的第二个参数(零)将初始计数设置为零。reduced
的函数,第一个值是当前计数,第二个值是数组中的当前项。value
属性为false
,我们会在计数中添加一个,否则我们会添加零。reduce
返回计数的最终值。答案 6 :(得分:1)
这样做,使用array.forEach而不是本机迭代。
var arrayObj= [
{
"id": 1,
"value": true
},
{
"id": 2,
"value": false
},
{
"id": 3,
"value": true
}
];
var trueCount = 0, falseCount = 0;
arrayObj.forEach(function(index){
if(index.value == true) {
trueCount++;
}
else if(index.value == false){
falseCount++;
}
});
console.log('True Obj is '+trueCount+' False Obj is '+falseCount);