Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript数组-跨2个数组检查匹配项_Javascript_Arrays - Fatal编程技术网

Javascript数组-跨2个数组检查匹配项

Javascript数组-跨2个数组检查匹配项,javascript,arrays,Javascript,Arrays,我有两个字符串对象数组 let count = 0; var basket1 = [‘Apples’, ‘Cucumber’, ‘Lettuce’, ‘Bananas’, ‘Pears’, ‘Cauliflower’, ‘Strawberry’] var basket2 = [‘Apples’, ‘Bananas’, ‘Oranges’, ‘Pears’, ‘Pineapple’, ‘Strawberry’] 当篮子1和篮子2中有一个相同的项目时,我想增加计数 注:basket1和bas

我有两个字符串对象数组

let count = 0;

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

var basket2 = [‘Apples’, ‘Bananas’, ‘Oranges’, ‘Pears’, ‘Pineapple’, ‘Strawberry’]
当篮子1和篮子2中有一个相同的项目时,我想增加计数

注:basket1和basket2的长度可以不同,因此basket1.length>basket2.length,basket1.length 我在想:

  • 使用
    basket.forEach((项目)=>{})循环遍历basket
  • 对于每个项目,如果
    otherBasket.includes(项目),则计数+++

  • 我只是想知道是否有更有效的方法来实现这一点。

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

    const basket1=[“苹果”、“黄瓜”、“莴苣”、“香蕉”、“梨”、“花椰菜”、“草莓”]
    const basket2=[“苹果”、“香蕉”、“橙子”、“梨”、“菠萝”、“草莓”]
    const combled=[…basket1,…basket2];
    const count=combined.length-新集合(组合).size;
    控制台日志(计数)是,您可以使用检查数组A中的项目是否存在于数组B


    这与使用循环相同,但要干净得多

    let count=0;
    var basket1=[“苹果”、“黄瓜”、“莴苣”、“香蕉”、“梨”、“花椰菜”、“草莓”]
    var basket2=[“苹果”、“香蕉”、“橙子”、“梨”、“菠萝”、“草莓”]
    basket1=basket1.filter(项目=>basket2.includes(项目));
    计数=篮筐1.5米长
    
    log(basket1,count)
    您可以使用这两个数组创建一个组合哈希映射。 然后查找计数就是对组合哈希映射的值求和

    e、 g

  • 循环第1个数组并创建一个如下所示的映射:
  • hashMap={'a':1,'b':1,'c':1}

  • 循环遍历第二个数组并更新哈希映射,如果键存在,则增加值,否则添加一个新条目。然后hashMap如下所示:
  • hashMap={'a':1,'b':2,'c':2,d:1}

  • 执行一个
    对象.values(hashMap)
    ,它给出数组
    [1,2,2,1]

  • 将这些值相加

  • 使用这种方法,您可以使用
    O(n)
    时间解决它,空间复杂度为
    O(n1+n2)
    ,其中n1和n2是两个数组中的项数。

    这取决于您的情况下“有效”是什么意思。
    如果您谈论的是性能,那么可以对数组进行排序。在这种情况下,您可以在一个周期内抛出两个数组。用
    .filter()
    替换
    .forEach()
    到底有什么好处?这与使用循环相同,但这比回答中提到的要干净得多。它真的更有效吗?我还没有分析它,但复杂性是O(n+m)(n-basket1.length,m-basket2.length)vs.O(n*m)带有forEach/过滤器,包括。
    const arr1 = ['a', 'b', 'c'];
    const arr2 = ['b', 'c', 'd'];