【问题标题】:Compare Two Arrays and Show False Indexes in JS比较两个数组并在 JS 中显示错误索引
【发布时间】:2020-02-23 00:52:19
【问题描述】:

我正在使用 jQuery 可排序函数编写一个类似的算法游戏。我已经编码了一些部分。我正在订购列表并比较两个数组。如果人可以做真正的订单(如果是真的算法)程序显示一条消息。 现在,我需要如果列表排序和我的算法排序为真(比较),真列表项文本变为 GREEN,如果为假则变为 RED . 我的代码:

  //pageonload mix ordering
  $(document).ready(function() {

    var parent = $("#algoritma");
    var divs = parent.children();
    while (divs.length) {
      parent.append(divs.splice(Math.floor(Math.random() * divs.length), 1)[0]);
    }

  });

  //when list ordering update
  jQuery(function($) {
    $('.algList').sortable({
      connectWith: '.algList',
      update: function(event, ui) {
        var liste = this.id;
        var order = $(this).sortable('toArray');
        var sira = order.join(';');
        var trueOrder = ["1", "2", "3", "4"];
        var trueSira = trueOrder.join(';');
        console.log(order);
        console.log(trueOrder);

        //compare arrays
        if (JSON.stringify(order) === JSON.stringify(trueOrder)) {
          console.log('They are equal! Congratulations');
        } else {
        
          //i need this part. if two array not equal ordering, true list texts turn to GREEN color and false list texts turn RED color 
          
        }


      }
    });
  });
  body {
    margin: auto;
    width: 600px;
  }

  #algoritma {
    font-size: 24px;
    font-family: -apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
    border: 1px solid #ccc;
    line-height: 35px;
  }

  li {
    list-style-type: decimal;
    border: 1px solid red;
  }
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
 
  
  <ul id="algoritma" class="algList">
    <li id="1">Step #1</li>
    <li id="2">Step #2</li>
    <li id="3">Step #3</li>
    <li id="4">Step #4</li>
  </ul>

【问题讨论】:

    标签: javascript jquery arrays compare jquery-ui-sortable


    【解决方案1】:

    您可以删除直接数组等于检查并执行类似的操作

      jQuery(function($) {
        $('.algList').sortable({
          connectWith: '.algList',
          update: function(event, ui) {
            var liste = this.id;
            var order = $(this).sortable('toArray');
            var sira = order.join(';');
            var trueOrder = ["1", "2", "3", "4"];
            var trueSira = trueOrder.join(';');
            console.log(order);
            console.log(trueOrder);
    
            //compare arrays
            for (let i=0; i < order.length; i++) {
                if (trueOrder[i] === order[i]) {
                    document.getElementById(i+1).style.color = 'green';
                } else {
                    document.getElementById(i+1).style.color = 'red';
                }
            }
    
          }
        });
      });
    

    为了避免初始顺序不是正确顺序的情况,我们可以这样做。创建一个只存储订单的新字符串。如果这个字符串的值为'1234',则清空父级并再次随机化。

      $(document).ready(function() {
        let parent = $("#algoritma");
        let divs = parent.children();
        let randomOrder = '';
        while (divs.length) {
          const randomDiv = divs.splice(Math.floor(Math.random() * divs.length), 1)[0];
          randomOrder += randomDiv.id;
          parent.append(randomDiv);
          if (randomOrder === '1234') {
            divs = parent.children();
            parent.empty();
            randomOrder = '';
          }
        }
      });
    

    【讨论】:

    • 那是完美的人,谢谢。最后一个问题;当页面加载程序混合列表时,如果它是正确的顺序?如何避免这件事?页面加载时,它绝不能处于正确的顺序
    • 嗨@ozan,我已经编辑了答案以包含这些更改。现在初始订单将永远不会与真实订单相同。此外,如果此答案有帮助,请考虑投票并接受答案。 :)
    • 再次非常感谢。这很明显。我投票了,但它没有改变我不明白为什么。它显示一个弹出警报。
    • 嘿,先生,我想问一些事情。我正在使用您的代码,并且正在尝试检查状态是真是假,但是出现了问题。我正在检查用户何时单击“测试”按钮。问题是:当他单击按钮时,订购错误,但在单击按钮之前,他确实订购了,这是一个错误。我们只需要检查最后一尊雕像。当他单击按钮时,程序必须查看最后一次排序。示例图片:link[/link]
    • 嗨@ozan,我没有清楚地理解你的要求。你能发布测试按钮的代码吗?
    猜你喜欢
    • 1970-01-01
    • 2015-09-03
    • 2017-07-02
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多