Javascript 总是在最长的数组上运行一个函数,并在该函数中使用最短的

标签 javascript

下面的函数应该总是比较最长数组中的所有项目,看看它们是否存在于较短的数组中。

现在下面的代码可以工作了,但是有点冗长。

const findSimilar = (arr1, arr2) => {
  const arrLongest = (arr1.length < arr2.length) ? arr2 : arr1;
  const arrShortest = (arr1.length < arr2.length) ? arr1 : arr2;
  return arrLongest.filter((arrLongestItem) => arrShortest.includes(arrLongestItem));
};

console.log(findSimilar([1,2,3,4,3], [1,2,3])); // (3) [1, 2, 3, 3]
console.log(findSimilar([1,2,3], [1,2,3,4,3])); // (4) [1, 2, 3, 3]

arrLongestarrShortest 这两个变量是必须的吗?或者还有别的办法吗?

最佳答案

另一种编写方法是使用排序和析构。

并重用已有的参数:

const findSimilar = (arr1, arr2) => {
  [arr1, arr2] = [arr1, arr2].sort((a, b) => a.length - b.length)
  return arr2.filter((arrLongestItem) => arr1.includes(arrLongestItem));
};

或者继续使用 arrShortestarrLongest,因为变量确切包含的内容会更加冗长。

const findSimilar = (arr1, arr2) => {
  const [arrShortest, arrLongest] = [arr1, arr2].sort((a, b) => a.length - b.length)
  return arrShortest.filter((arrLongestItem) => arrLongest.includes(arrLongestItem));
};

与重用变量名相比,我总是更喜欢正确命名的附加变量。

使用 sort 的好处是它表达了所做的事情,并且你减少了可能的错误,因为 arr1, arr2 只被使用在表达式中出现一次,而不是像在 ?:

中出现三次

而且您肯定可以在 CertainPerformance 的答案中将它与 new Set 结合使用

关于Javascript 总是在最长的数组上运行一个函数,并在该函数中使用最短的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59233922/

相关文章:

javascript - 如何在 iPad 上使用 HTML5/Javascript 合成音频

javascript - 获取当前元素的索引并改变他的样式

Javascript: "control"的定义是什么?

javascript - JS 文件未被执行

javascript - 为什么即使函数无法调用,函数调用的参数部分中的表达式也会被求值?

javascript - 使用 require js 为 Backbone 应用程序命名

Javascript 解构器

Javascript 真/假函数

javascript - 使前景透明,但背景不透明

javascript - 使用 Javascript/Jquery 将 div 内容导出到 Excel