JavaScript 将数组分成两半,将上半部分与下半部分并列

JavaScript split array in half juxtapose the first half with second half

将一个数组平分为两个的方法是什么。然后,将后半部分放在前半部分下方,以便比较新的最终数组是否应该在插槽中接收零或一。

var master_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38];

var first_half = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19];

var second_half = [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38];

var final_usable_array_reduced = [];

因此,给定一个包含 38 个复选框的表单,如果第 5、19、37 和 38 个复选框被选中,final_usable_array_reduced 将是

final_usable_array_reduced = [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1];

final_usable_array_reduced[4] = **represents the 5th <strong>or</strong> 24th box being checked**

final_usable_array_reduced[18] = **represents the 19th <strong>or</strong> 38th boxes being checked**

我想你可以通过一个简单的 for 循环来实现这个 master_array 的一半,or 将数组下半部分的值与上半部分的值相结合:

var master_array = new Array(38).fill(0);
master_array[4] = 1;
master_array[18] = 1;
master_array[36] = 1;
master_array[37] = 1;

let len = master_array.length / 2;
final_usable_array_reduced = new Array(len);
for (let i = 0; i < len; i++) {
  final_usable_array_reduced[i] = master_array[i] | master_array[i + len];
}
console.log(final_usable_array_reduced);

检查这个:

var array = [0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0];
var firstHalf = array.slice(0,array.length/2);
var secondHalf = array.slice(array.length/2);
var result = firstHalf.map(function(e,i){
    return e || secondHalf[i];
});

console.log(result);

我在这里做的是用 slice 将数组分成两半(当然考虑到数组元素是偶数),然后我映射第一个返回 1(或 true , 是一样的) 如果 firstArray[i]secondArray[1] 是 1.

考虑以下因素。

$(function() {
  function addChecks(count, tObj, cont) {
    var i;
    if (cont == undefined) {
      i = 0;
    } else {
      i = parseInt($("input:last").val()) - 1;
      count = i + count;
    }
    for (i; i <= count; i++) {
      $("<input>", {
        type: "checkbox",
        value: (i + 1),
        title: (i + 1)
      }).appendTo(tObj);
    }
  }

  function checksToArray() {
    var arr = [];
    $("input[type='checkbox']").each(function() {
      arr.push($(this).prop("checked"));
    });
    return arr;
  }

  function compHalfArr(a) {
    var arr = [];
    var h = Math.floor(a.length / 2);
    for (var i = 0; i <= h; i++) {
      arr.push(a[i] || a[(i + h)]);
    }
    return arr;
  }

  addChecks(14, $(".section-1"));
  addChecks(14, $(".section-2"), true);

  $("button").click(function() {
    var allChecks = checksToArray();
    var compChecks = compHalfArr(allChecks);
    $(".results").html("<span>" + compChecks.join("</span><span>") + "</span>").find("span:last").remove();
  });
});
.checks input {
  margin-right: 20px;
}

.results span {
  display: inline-block;
  font-family: Arial, sans-serif;
  width: 40px;
  text-align: center;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="checks section-1"></div>
<div class="checks section-2"></div>
<button>Check</button>
<div class="results"></div>

您可以使用中途标记进行循环。