Javascript 将一个数组与其他数组组合,推送每个组合

Javascript 将一个数组与其他数组组合,推送每个组合,javascript,arrays,compare,Javascript,Arrays,Compare,我尝试获取一个数组,并将该数组的每个值与数组中的下一个值进行比较。当我运行代码时,应该与多个数组匹配的组件只返回一个匹配项,而不是所有匹配项。我可能在某个地方做错了什么,但在我的一生中,我似乎无法理解它 这是我的代码: 输入 minterms = [["4",[0,1,0,0]], ["8",[1,0,0,0]], ["9",[1,0,0,1]], ["10",[1,0,1,0]], ["12",[1,1,0

我尝试获取一个数组,并将该数组的每个值与数组中的下一个值进行比较。当我运行代码时,应该与多个数组匹配的组件只返回一个匹配项,而不是所有匹配项。我可能在某个地方做错了什么,但在我的一生中,我似乎无法理解它

这是我的代码:

输入

minterms = [["4",[0,1,0,0]],
           ["8",[1,0,0,0]],
           ["9",[1,0,0,1]],
           ["10",[1,0,1,0]],
           ["12",[1,1,0,0]],
           ["11",[1,0,1,1]],
           ["14",[1,1,1,0]],
           ["15",[1,1,1,1]]];
功能

function combineMinterms(minterms) {
var match = 0;
var count;
var loc;
var newMin = [];
var newMiny = [];
var used = new Array(minterms.length);

//First Component
for (x = 0; x < minterms.length; x++) {
if(minterms[x][1][minterms[x][1].length - 1] == "*") {
  newMin.push(minterms[x].slice());
  continue;
};
  //Second Component
  for (y = x + 1; y < minterms.length; y++) {
  count = 0;
    //Compare each value
    for (h = 0; h < minterms[x][1].length; h++) {
      if (minterms[x][1][h] != minterms[y][1][h]) {
      count++;
      loc = h;
      }
      if (count >= 2) {break; };
    }
    //If only one difference, push to new
    if (count === 1) {
      newMin.push(minterms[x].slice());
      newMiny = minterms[y].slice();
      newMin[match][1][loc] = "-";
      while(newMin[match][0].charAt(0) === 'd') {
        newMin[match][0] = newMin[match][0].substr(1);
      }
      while(newMiny[0].charAt(0) === 'd') {
        newMiny[0] = newMiny[0].substr(1);
      }
      newMin[match][0] += "," + newMiny[0];
      used[x] = 1;
      used[y] = 1;
      match++;
      continue;
    }
}
  //If never used, push to new
  if(used[x] != 1) {
    newMin.push(minterms[x].slice());
    newMin[match][1].push("*");
    match++;
  }
}
 return newMin; 
}
它将把第8学期和第9学期结合起来,但不会继续把第8学期和第10学期、第12学期结合起来


提前感谢您的帮助。

Array.prototype.slice
执行浅拷贝

minterms
中的每个条目都是一个字符串数组和一个嵌套数组

对条目进行切片时,将得到一个新数组,其中包含字符串的副本和数组对象引用的副本。但是数组引用的副本仍然指向
minterms
元素中包含的数组

更新嵌套数组时

newMin[match][1][loc] = "-";
您正在更新输入中的嵌套数组。我从来没有搞清楚您正在做的事情的逻辑,但我相信这就是问题所在,在克隆输入数组元素时,克隆嵌套数组的解决方案也是如此

您可能希望解决的第二个问题是,没有声明所有变量:
var x,y,h或等效的内联声明。

设minterms=[4,8,9,10,12,11,14,15];
设newMin=[];
minterms.map((值,索引)=>{
minterms.reduce((累加器、currentValue、currentIndex、数组)=>{
累加器=值;
释放=(累加器^currentValue).toString(2);
if(out.split(“”).filter(n=>n==“1”).length==1)newMin.push([value,currentValue]);
},价值);
});

console.log(newMin)请同时添加所需的结果。@NinaScholz我已经添加了所需的输出,谢谢,修复了它。我试着永远把我的头绕在错误上。
newMin[match][1][loc] = "-";