我有一个数组对象,默认情况下每个数组都是[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]))
,但这不起作用,或者我遗漏了一些东西。我正朝着正确的方向前进吗?
答案 0 :(得分:0)
$.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)
答案 1 :(得分:0)
您目前只是查看是否真的&#39;在数组中,如果它只返回FIRST索引为true,你可以使用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");
}
答案 2 :(得分:0)
您可以将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>'));
答案 3 :(得分:0)
您可以使用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 '))
答案 4 :(得分:0)
我最终使用以下作为解决方案
for (var idx = 1; idx <=6 ; idx++) {
qcomplete = qcomplete + (surveyDataObj[idx][0] ? 1 : 0);
qcomplete = qcomplete + (surveyDataObj[idx][1] ? 1 : 0);
}
答案 5 :(得分:-1)
我建议使用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
}
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="b1" type="checkbox"></input>
&#13;