Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript获取数组中真/假值的数目_Javascript_Arrays_Angularjs_Arraylist - Fatal编程技术网

使用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;iconsole.log(arrayObj.numbolean(false));
我不完全确定您真正想要的是什么:您多次声明要计算有多少项具有
false
值,但您对代码的讨论听起来似乎只想知道它们是否都具有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);
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
一起工作。