我有 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,
我在想:
- 使用
basket.forEach( (item) => {} ) 循环购物篮
- 对于每个项目,如果
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/