簡體   English   中英

檢查對象數組是否包含布爾值 true/false

[英]Check if object array contains boolean true/false

我有一個數組對象,其中每個數組默認為 [false,false] 並且它對應於一個具有是和否選項的復選框。 如果用戶選擇是,數組將更新為 [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)返回$.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 的第一個索引,您可以使用 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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM