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] = "-";