Javascript 数组 - 检查 2 个数组中的匹配项

标签 javascript arrays

我有 2 个字符串对象数组。

let count = 0;

var basket1 = [‘Apples’,  ‘Cucumber’, ‘Lettuce’, ‘Bananas’, ‘Pears’, ‘Cauliflower’, ‘Strawberry’]

var basket2 = [‘Apples’, ‘Bananas’, ‘Oranges’, ‘Pears’, ‘Pineapple’, ‘Strawberry’]

当篮子 1 和篮子 2 中有相同的商品时,我想增加计数。

注意:篮子1和篮子2的长度可以不同,篮子1.length >篮子2.length,篮子1.length <篮子2.length或篮子1.length =篮子2.length,

我在想:

  1. 使用 basket.forEach( (item) => {} ) 循环购物篮
  2. 对于每个项目,如果 otherBasket.includes(item), count++

我只是想知道是否有更有效的方法来做到这一点。

最佳答案

如果每个数组中的每个项只能出现一次,则可以将它们组合成一个数组,然后计数就是组合数组的总长度 - 组合数组的 Set 的大小(仅限唯一)项目)。

const basket1 = ['Apples',  'Cucumber', 'Lettuce', 'Bananas', 'Pears', 'Cauliflower', 'Strawberry']
const basket2 = ['Apples', 'Bananas', 'Oranges', 'Pears', 'Pineapple', 'Strawberry']

const combined = [...basket1, ...basket2];
const count = combined.length - new Set(combined).size;

console.log(count);

如果该项目可以在每个数组中出现多次:

const basket1 = ['Apples',  'Cucumber', 'Lettuce', 'Bananas', 'Bananas', 'Pears', 'Cauliflower', 'Strawberry', 'Apples']; // apple appears twice, bananas appears twice
const basket2 = ['Apples', 'Bananas', 'Bananas', 'Oranges', 'Pears', 'Pineapple', 'Strawberry']; // apple appears once, bananas appear twice

// create an object with the counts of each item in basket1
const total1 = basket1.reduce((r, s) => {
  r[s] = (r[s] || 0) + 1;
  
  return r;
}, {});

const count = basket2.reduce((cnt, s) => {
  // if has a value > 0 in total1, decrment the value, and add 1 to the count
  if(total1[s]) {
    total1[s]--;
    cnt++;
  }
  
  return cnt;
}, 0);

console.log(count);

关于Javascript 数组 - 检查 2 个数组中的匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59627305/

相关文章:

javascript - 获取给定概率的伪随机项

c - 字符串数组指针/数组名称的有效赋值是什么?

ios - NSArray 中对象的说明

java - 从服务器下载文件时显示进度条

javascript - 以编程方式清除 Phonegap 的 InAppBrowser 缓存

javascript - 在magento中使用自定义模块添加js文件后,结帐页面无法正常工作

javascript - 检测刷新和重新加载之间的差异

javascript - 将图像的点击数据保存在表格js中

java - 简单数组: Check to see if value matches

javascript - 使用 SlideToggle 展开列表