比较两个阵列并返回重复项



我有两个数组,我想比较它们并返回两者的所有值,即使它们重复。

const correctValue = ['0', '1'];
const actualValue = [
    ['0', '2', '0', 'E', '1', '1', 'u', '0', '1', '0', ':', '1'],
    ['0', '0', '1', 'u', '0', '}', '1', 'l', '1', '1', '1', '˜'],
    ['x', 'k', 'e', '2', '|', '[', 'z', '8', 's', 'd', '2', '5'],
    ['r', '8', '6', ']', '2', '6', 'H', ';', 'Á', 'l', 'm', '?'],
    ['Y', '0', '0', '1', '1', '7', '1', '.', '0', 'v', '0', '1']
];

尝试以下解决方案: -

   <!DOCTYPE html>
<html>
<body>


<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
<script>
const correctValue = ['0', '1'];
const actualValue = [
    ['0', '2', '0', 'E', '1', '1', 'u', '0', '1', '0', ':', '1'],
    ['0', '0', '1', 'u', '0', '}', '1', 'l', '1', '1', '1', '˜'],
    ['x', 'k', 'e', '2', '|', '[', 'z', '8', 's', 'd', '2', '5'],
    ['r', '8', '6', ']', '2', '6', 'H', ';', 'Á', 'l', 'm', '?'],
    ['Y', '0', '0', '1', '1', '7', '1', '.', '0', 'v', '0', '1']
];
function myFunction() {
var same_values=[];
for(var i=0;i<correctValue.length;i++)
{
    for(var j=0;j<actualValue.length;j++)
   {    
        for(var k =0;k<actualValue[j].length;k++)
           {
             if(correctValue[i]==actualValue[j][k])
              {
                same_values.push(actualValue[j][k])
              }
            }
    }
}
console.log(same_values)
}
</script>
</body>
</html>

您可以使用Array.prototype.filter()。尝试以下操作:

arr1.filter(e => arr2.includes(e));

工作演示:

 
function duplicate(arr1, arr2) {
   return arr1.filter(e => arr2.includes(e));
}
var duplicates = [];
const correctValue = ['0', '1'];
const actualValue = [
['0', '2', '0', 'E', '1', '1', 'u', '0', '1', '0', ':', '1'],
['0', '0', '1', 'u', '0', '}', '1', 'l', '1', '1', '1', '˜'],
['x', 'k', 'e', '2', '|', '[', 'z', '8', 's', 'd', '2', '5'],
['r', '8', '6', ']', '2', '6', 'H', ';', 'Á', 'l', 'm', '?'],
['Y', '0', '0', '1', '1', '7', '1', '.', '0', 'v', '0', '1']
];
actualValue.forEach(arr => duplicates.push(duplicate(correctValue, arr)))
console.log(duplicates);

您可以使用降低和过滤来实现自己在做的事情。在这种方法中,我在实际价值中过滤每一行,并串联输出。

const correctValue = ['0', '1'];
const actualValue = [
['0', '2', '0', 'E', '1', '1', 'u', '0', '1', '0', ':', '1'],
['0', '0', '1', 'u', '0', '}', '1', 'l', '1', '1', '1', '˜'],
['x', 'k', 'e', '2', '|', '[', 'z', '8', 's', 'd', '2', '5'],
['r', '8', '6', ']', '2', '6', 'H', ';', 'Á', 'l', 'm', '?'],
['Y', '0', '0', '1', '1', '7', '1', '.', '0', 'v', '0', '1']];
actualValue.reduce((arr, listData)=> arr.concat(listData.filter(data => correctValue.includes(data))),[])
console.log(output) //["0", "0", "1", "1", "0", "1", "0", "1", "0", "0", "1", "0", "1", "1", "1", "1", "0", "0", "1", "1", "1", "0", "0", "1"]
function compareArrays(arr1, arr2) {
  return arr1.reduce((acc, item) {
    if (arr2.includes(item)) {
      acc.push(item)
    }
    return acc
  },[])
}

不是最有效的解决方案,但它起作用
需要指定是否仅需要唯一的值
最好的是,如果您编写预期输出

相关内容

  • 没有找到相关文章

最新更新