JavaScript:使用Reduce()构造一个比较输入数组的函数交集;仅返回相交元素

松仁0

构造一个函数交集,该交集比较输入数组,并返回一个包含所有输入中包含的元素的新数组。

我的解决方案有效,但是非常麻烦:

const intersection = (arrMerged) => {

  let finalArr = []; 
  let flatArray = [].concat(...arrMerged)

  let newArr = []; 
  //console.log(flatArray)

  //let interArray = []; 

  if (arrMerged[2] !== undefined){

    newArr = arrMerged[0].map((elem) => {
      if (arrMerged[1].includes(elem) && arrMerged[2].includes(elem)){
        return elem; 
      }
    })
  }

  else {
    newArr = arrMerged[0].map((elem) => {
      if (arrMerged[1].includes(elem)){
        return elem; 
      }
    })
  }


  newArr.forEach((elem) => {
    if (elem !== undefined){
      finalArr.push(elem)
    }
  })
  return finalArr; 
}

// Uncomment these to check your work!
const arr1 = [5, 10, 15, 20];
const arr2 = [15, 88, 1, 5, 7];
const arr3 = [1, 10, 15, 5, 20];

console.log(intersection([arr1, arr2, arr3])); // should log: [5, 15]

我也想在我的解决方案中使用reduce()。有人可以提供使用reduce()并且更有效的替代代码解决方案吗?

如果您可以评论代码的每一行正在做什么以帮助我理解,我将不胜感激。

马埃里·阿里(Maheer Ali)

您可以filter()在任何子数组上使用。并使用嵌套every()在主数组上。

const arr1 = [5, 10, 15, 20];
const arr2 = [15, 88, 1, 5, 7];
const arr3 = [1, 10, 15, 5, 20];

const intersection = arr => arr[0].filter(x => arr.every(a => a.includes(x)));

console.log(intersection([arr1,arr2,arr3]))

说明:

看代码:

arr[0].filter(x => arr.every(a => a.includes(x)));

这个词的解释将。它仅过滤掉arr[0]每个其他子数组中包含的第一个subarray()中的那些元素

Array.prototype.every()以回调为参数。回调的第一个元素将是元素本身。在上述情况下a将是arr1,arr2,arr3

arr.every(a => a.includes(x))检查第一个数组的当前元素。5,10,15,20存在于所有其他数组中

上面的版本中有嵌套循环。如果您想要更有效的解决方案,可以先将除第一个以外的所有数组转换为Set,然后使用Set.has

const arr1 = [5, 10, 15, 20];
const arr2 = [15, 88, 1, 5, 7];
const arr3 = [1, 10, 15, 5, 20];

const intersection = arr => {
  let [first,...rest] = arr;
  rest = rest.map(x => new Set(x));
  return first.filter(x => rest.every(a => a.has(x)));


} 
console.log(intersection([arr1,arr2,arr3]))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

仅一个值分配给构造函数中的所有arraylist元素

使用jQuery查找表的最后一个输入值时遇到麻烦,我的函数仅返回乱码。如何获得最后一行的输入值?

如何(高效)仅使用一对元素对时生成不相交集?

带for循环的Javascript数组,仅返回最后一个元素

仅返回列表的第一个输入但不继续输入的函数超出范围

比较两个数组中的元素,并使用python当一个值大于另一个时返回True

Javascript数组仅运行函数,该函数在数组的一个元素上返回promise

在JavaScript中制作一个函数,以相反的顺序返回数组和元素

OpenCL Reduce内核仅返回一个值

JavaScript:创建一个返回数组频率分布的函数

一个函数,用于获取任意给定数量的包含字符串的数组的交集元素

有一个构造函数,将输入添加到数组

如何在标准ML中仅使用一个元素构造一个元组?

如何仅返回数组的最后一个元素而不获取所有元素

如何使用地图函数(JavaScript)返回一个特定元素

在for循环中构造时仅返回数组的最后一个值

PHP关联数组交集返回两个元素,而不是一个

如何使用JavaScript仅选择一个li元素?

数组函数仅返回第一个值

使用javascript仅更改一个输入字段

数组仅返回一个元素

使用reduce函数时返回第一个元素

Pandas 返回一个返回与输入组长度相同的数组的函数

如何仅使用 Javascript 一次显示一个数组元素?

需要使用 Javascript Splice 函数的数组的最后一个元素

JavaScript:创建函数,该函数使用回调返回一个对象,该对象的键与值数组中的元素匹配

返回数组的 Computercraft 函数,使用第一个元素作为布尔值

Javascript:函数返回数组的最后一个元素

我正在尝试创建一个 javascript 函数,该函数使用通过 HTML 输入的值并返回一个函数