检查对象数组是否包含布尔值true/false
Check if object array contains boolean true/false
我有一个数组对象,其中每个数组默认为[false,false],并且它对应于一个有yes和no选项的复选框。如果用户选择"是",则数组将更新为[true,false],如果用户回答"否",则阵列将更新[false,true]。
我的对象的可视化表示
Object
|
|-> 1
|-> [false,false]
|-> 2
|-> [false,false]
...
我尝试了以下操作,但这不是我所需要的,因为它似乎没有检查数组的第二个索引。
for (var idx = 1; idx <=6 ; idx++) {
if (DataObj[idx].indexOf(true))
{
console.log("Not Answered");
}
else
{
console.log("Answered");
}
代码输出
[true, false]
Answered
[false, true]
Not Answered
预期输出
[true, false]
Answered
[false, true]
Answered
[false, false]
Not answered
我也试过($.inArray(true, DataObj[idx]))
,但它不起作用,或者我错过了一些东西。我的方向对吗?
$.inArray(item, array)
和Array.prototype.indexOf(item)
都返回数组中项目的索引(如果找到),否则返回-1。if (a.indexOf(x))
仅检查索引是否为零。您必须检查索引是否不是-1
,或者至少为零:
for (var idx = 1; idx <=6 ; idx++) {
if (DataObj[idx].indexOf(true) >= 0)
您当前只检查数组中是否有"true"。如果是,它将只返回true的FIRST索引,您可以使用lastIndexOf(true)但逻辑可能会开始变得棘手
您还需要在indexOf()中添加一个小检查,它要么返回-1,要么返回索引,所以-1意味着它不在那里:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
更好的是,你可以像这样循环通过你的对象一样循环通过这个数组:
for (var idx = 1; idx <=6 ; idx++) {
var array = DataObj[idx];
for (var i = 0; i < array.length; i++) {
// here you will loop through the entire array and see both 'i' indexes
}
if (DataObj[idx].indexOf(true) > -1) // you need to do this here as well
{
console.log("Not Answered");
}
else
{
console.log("Answered");
}
您可以将Array#some()
与Boolean
一起用作回调。
var object = { 0: [true, false], 1: [false, true], 2: [false, false] };
document.write(Object.keys(object).map(function (k) {
return object[k].some(Boolean) ? 'Answered' : 'Not answered';
}).join('<br>'));
您可以使用reduce
函数和logic OR
(||
)
var j = { 1: [true, false], 2: [false, true], 3: [false, false] };
var r = Object.keys(j).map(e => j[e].reduce((p, c) => p || c, false));
document.write(r.map(e => e ? ' Answered' : ' Not answered '))
我最终使用了以下作为解决方案
for (var idx = 1; idx <=6 ; idx++) {
qcomplete = qcomplete + (surveyDataObj[idx][0] ? 1 : 0);
qcomplete = qcomplete + (surveyDataObj[idx][1] ? 1 : 0);
}
我建议使用jQuery。
var a = {
a1: [false, false]
};
$("#b1").change(function() { // <-- when checkbox status is changing
if($(this).is(":checked")){
a.a1[0]=true;
a.a1[1]=false;
$("body").append(JSON.stringify(a.a1)); // <-- just for the output
}else{
a.a1[0]=false;
a.a1[1]=true;
$("body").append(JSON.stringify(a.a1)); // <-- just for the output
}
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="b1" type="checkbox"></input>
- JavaScript-切换“;全部检查”;复选框true/false
- true==false以某种方式计算为true
- Javascript似乎在说true ==false
- JavaScript onkeydown, return true,false
- 从异步函数返回true/false以用于同步if()
- 函数返回undefined而不是true/false
- 为什么true/true是1,true/false是无穷大,false/true是0,false/false是NaN
- 检查对象数组是否包含布尔值true/false
- 函数:根据字符串中是否存在子字符串返回 True/False
- 如何将 ng-show 与控制器中返回 true/false 的函数一起使用
- 在input.checked=true/false _without_ jQuery上触发一个事件
- jQuery javascript未正确返回true/false
- 如何从嵌套的jquery回调函数中返回true/false
- 如何在骨干模型属性中设置布尔值true/false
- 如何使用angular或javascript在基于true/false返回的html中显示值
- 基于true/false变量显示/隐藏进度条
- Node.js在返回true/false时停止函数
- 是否可以将true/false值传递给ajax函数
- 根据Webix中的复选框值编辑true/false
- Meteor:设置车把变量true/false