比较两个数组和唯一值计数?



function commonElement(array1, array2) {
var count = 0;
for (var i = 0; i < array1.length; i++) {
for (var j = 0; j < array2.length; j++) {
if (array1[i] === array2[j]) {
count++;
}
}
}
return count
}
console.log(commonElement([5, 2, 8, 9, 4, 7], [3, 2, 9, 5, 7]))

*当我在我的数组中放置非唯一值时,输出为 *

console.log(commonElement([5,2,2,8,9,4,7],[3,2,9,5,7])) //output is 5

但是我想我的输出是 4,因为 2,2 与 2 相比,它只有 2 计数输出是 5

首先克隆其中一个数组(以避免变异(,然后迭代另一个数组,使用findIndex在克隆的数组中查找匹配的元素。如果存在,请将其拼接并加 1 以计数:

function commonElement(array1, array2) {
const arr1 = array1.slice();
let count = 0;
for (const val of array2) {
const index = arr1.indexOf(val);
if (index !== -1) {
count++;
arr1.splice(index, 1);
}
}
return count;
}
console.log(commonElement([5, 2, 2, 8, 9, 4, 7], [3, 2, 9, 5, 7]))
console.log(commonElement([2, 2], [2, 2]))

为了将计算复杂度从O(n^2)降低到O(n),请先将其中一个数组计数到一个对象中:

function commonElement(array1, array2) {
const arr1Counts = {};
for (const val of array1) {
arr1Counts[val] = (arr1Counts[val] || 0) + 1;
}
let count = 0;
for (const val of array2) {
if (arr1Counts[val]) {
arr1Counts[val]--;
count++;
}
}
return count;
}
console.log(commonElement([5, 2, 2, 8, 9, 4, 7], [3, 2, 9, 5, 7]))
console.log(commonElement([2, 2], [2, 2]))

只需几行代码即可

var array1 =[5, 2, 2, 8, 9, 4, 7];
var array2 =[3, 2, 9, 5, 7];
var common = array1.filter(function(obj) { return array2.indexOf(obj) == -1; });
console.log(common);

您可以从第一个数组中计数相同的项目,并从第二个数组向下计数,并检查 id 计数大于或等于零,计数为结果。

function commonElement(array1, array2) {
var counts = {},
count = 0;
array1.forEach(v => counts[v] = (counts[v] || 0) + 1);
array2.forEach(v => (counts[v] = (counts[v] || 0) - 1) >= 0 && ++count);
return count;
}
console.log(commonElement([5, 2, 8, 9, 4, 7], [3, 2, 9, 5, 7]));
console.log(commonElement([5, 2, 2, 8, 9, 4, 7], [3, 2, 9, 5, 7]));
console.log(commonElement([2, 2], [2, 2]));

获取两个数组中常见的元素数量的最简单方法是:

// initialise two arrays
var listA = [1,2,2,3,4,5,6,7];
var listB = [2,4,6,8];

function checkCommonElements(array1, array2) {
// get common values from array
var filterValues = array1.filter(value => -1 !== array2.indexOf(value))
// map values from without repeating values
const arr = [];
filterValues.map((x) => {
if (arr.indexOf(x) === -1) {
arr.push(x);
}
})
// return the length of array
return arr.length;
}
var result = checkCommonElements(listA, listB);
console.log(result);
// output is 3.

为您提供两个数组中的公共元素的数量,而无需重复任何项目。

相关内容

  • 没有找到相关文章

最新更新