使用javascript获取数组中真/假值的数目
我有一个属性为使用javascript获取数组中真/假值的数目,javascript,arrays,angularjs,arraylist,Javascript,Arrays,Angularjs,Arraylist,我有一个属性为id和value var arrayObj= [ {"id": 1, "value": true}, {"id": 2, "value": false}, {"id": 3, "value": true} ] 我需要获取具有属性true/false的对象数。 我使用的是Array.prototype.every(),但我的逻辑并没有像看上去那样正常工作。有人能告诉我我做错了什么吗?我没有显示计数 function che
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");
}
你可以这样做
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);
int false=0,trues=0;
对于(i=0;i函数,.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.each(checkIfFalse)
将返回false
,因为并非所有项都是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;
var arrayObj=[{
“id”:1,
“价值”:真实
}, {
“id”:2,
“值”:false
}, {
“id”:3,
“价值”:真实
}];
var trueCount=falseCount=0;
arrayObj.forEach(函数(对象){
object.value==true?trueCount++:falseCount++;
});
console.log(trueCount,falseCount);
var arrayObj=[{
“id”:1,
“价值”:真实
},
{
“id”:2,
“值”:false
},
{
“id”:3,
“价值”:真实
}
];
Array.prototype.numBoolean=函数(条件){
var计数器=0;
for(var i=0;i console.log(arrayObj.numbolean(false));
我不完全确定您真正想要的是什么:您多次声明要计算有多少项具有false
值,但您对代码的讨论听起来似乎只想知道它们是否都具有falsevalue
属性
如果它是您要查找的第一个(假值的实际数量),您可以使用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);
var allFalse = numFalse == data.length,
noneFalse = numFalse == 0,
someFalse = numFalse > 0 && numFalse < data.length;
如果是第二个(您想知道是否所有值都为false),或者您想检查是否没有或只有部分条目具有false
值
条目,您可以实现以下功能:
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);
var allFalse = numFalse == data.length,
noneFalse = numFalse == 0,
someFalse = numFalse > 0 && numFalse < data.length;
var allFalse=numFalse==data.length,
noneFalse=numFalse==0,
someFalse=numFalse>0&&numFalse
如果您不熟悉reduce
,它的工作原理如下:
reduce
(零)的第二个参数将初始计数设置为零
- 对于数组中的每个项,调用传递给
reduced
的函数,第一个值是当前计数,第二个值是数组中的当前项
- 如果项目的
值
属性为false
,则我们在计数中添加一,否则添加零
- 最后,
reduce
返回计数的最终值
要这样做,请使用array.forEach
而不是本机迭代
var arrayObj=[{
“id”:1,
“价值”:真实
},
{
“id”:2,
“值”:false
},
{
“id”:3,
“价值”:真实
}
];
var trueCount=0,
假计数=0;
arrayObj.forEach(函数(索引){
如果(index.value==true){
trueCount++;
}else if(index.value==false){
错误计数++;
}
});
console.log('True Obj是'+trueCount+'False Obj是'+False count);
为什么不使用.filter
//您的数组对象
var arrayObj=[
{“id”:1,“value”:true},
{“id”:2,“value”:false},
{“id”:3,“value”:true}
];
//计算真实项目
var count=arrayObj.filter(函数{返回s.value;}).length;
//结果
console.log(“#True:+count);
删除文档。写入改为使用console.log()
逻辑对我来说没有意义。不是(全部为false)!=全部正确我建议您可以直接使用类似这样的for loopI,因为这是一个很好的elegent解决方案,如果它碰巧是家庭作业而不是实际问题,那么肯定会让海报陷入麻烦。如何使用。过滤器仅查找错误项?@socca1157只需添加“!”在s.value
之前反转布尔值。var count=arrayObj.filter(函数){return!s.value;}).length;
我尝试过,但不让我与假值或空值进行比较。我最终将变量转换为字符串并以这种方式进行直接比较。谢谢!@socca1157真的吗?这很奇怪。对我来说,它与false
和null
一起工作。