比较 Javascript 中的两个数组以找出相同的相似点和其他相似点
Comparing Two Arrays in Javascript to Find Identical Similarities and Other Similarities
我在 Javascript 中有两个数组:code 和 submittedCode。我正在尝试比较这两个数组。每个数组都是 4 个整数长,每个整数是 1 到 6 的随机值。我还有两个变量:红色和白色。两者比较时,红色变量应设置为相同编号、相同索引的数组中相似的个数。 White 应该设置为数组中相同数量但不同索引的相似数量。比如code数组是[1, 3, 6, 5],submittedCode是[1, 6, 4, 5],那么red设置为2,white设置为1,这是一样的如果有人玩过的话,逻辑就像游戏策划者一样。以下是我尝试过的方法,但没有按预期工作。
for(let i = 0; i < code.length; i++) {
if(code[i] == submittedCode[i])
{
code.splice(i, 1);
submittedCode.splice(i, 1);
red++;
//console.log(i);
}
}
console.log(code);
var saveLength = code.length;
code = code.filter(function(val) {
return submittedCode.indexOf(val) == -1;
});
white = saveLength - code.length;
console.log(red + ", " + white);
let arr=[1,3,1,2] //two array we operate on
let arr2=[4,4,1,2]
let red=0
let white=0
//we need to check the current length of remaining array
let currentLength=arr.length
for(let i=0; i<currentLength; i++){
if(arr[i]===arr2[i]){
arr.splice(i,1) //if same number same index, remove this item from array
arr2.splice(i,1)
currentLength-=1 //currentLength-1 because we reduced the array
i-=1 //i-1 because we'd skip the next element
red+=1 //update red
}
}
//we basically do the same thing but with white
//but in the second array we look for the first index of the current element and remove that
for(let i=0; i<arr.length; i++){
if(arr2.includes(arr[i])){
//1: I should've taken away the item from arr2 first
//2: arr2.splice(arr2.findIndex(f=>f===arr[i],1)) notice I messed up where I put the 1 at the end
arr2.splice(arr2.findIndex(f=>f===arr[i]),1)
arr.splice(i,1)
i-=1
white+=1
}
}
现在这可能不是最佳解决方案,您可以在一个循环中执行此操作,但为了可见性,我创建了 2 个 for 循环,首先我们检查 'red' 元素,然后将它们取出
在第二个循环中,我们检查是否有任何 'white' 元素,然后将它们取出。
我在 Javascript 中有两个数组:code 和 submittedCode。我正在尝试比较这两个数组。每个数组都是 4 个整数长,每个整数是 1 到 6 的随机值。我还有两个变量:红色和白色。两者比较时,红色变量应设置为相同编号、相同索引的数组中相似的个数。 White 应该设置为数组中相同数量但不同索引的相似数量。比如code数组是[1, 3, 6, 5],submittedCode是[1, 6, 4, 5],那么red设置为2,white设置为1,这是一样的如果有人玩过的话,逻辑就像游戏策划者一样。以下是我尝试过的方法,但没有按预期工作。
for(let i = 0; i < code.length; i++) {
if(code[i] == submittedCode[i])
{
code.splice(i, 1);
submittedCode.splice(i, 1);
red++;
//console.log(i);
}
}
console.log(code);
var saveLength = code.length;
code = code.filter(function(val) {
return submittedCode.indexOf(val) == -1;
});
white = saveLength - code.length;
console.log(red + ", " + white);
let arr=[1,3,1,2] //two array we operate on
let arr2=[4,4,1,2]
let red=0
let white=0
//we need to check the current length of remaining array
let currentLength=arr.length
for(let i=0; i<currentLength; i++){
if(arr[i]===arr2[i]){
arr.splice(i,1) //if same number same index, remove this item from array
arr2.splice(i,1)
currentLength-=1 //currentLength-1 because we reduced the array
i-=1 //i-1 because we'd skip the next element
red+=1 //update red
}
}
//we basically do the same thing but with white
//but in the second array we look for the first index of the current element and remove that
for(let i=0; i<arr.length; i++){
if(arr2.includes(arr[i])){
//1: I should've taken away the item from arr2 first
//2: arr2.splice(arr2.findIndex(f=>f===arr[i],1)) notice I messed up where I put the 1 at the end
arr2.splice(arr2.findIndex(f=>f===arr[i]),1)
arr.splice(i,1)
i-=1
white+=1
}
}
现在这可能不是最佳解决方案,您可以在一个循环中执行此操作,但为了可见性,我创建了 2 个 for 循环,首先我们检查 'red' 元素,然后将它们取出 在第二个循环中,我们检查是否有任何 'white' 元素,然后将它们取出。