首页 > 解决方案 > 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?或者有没有别的办法。

标签: javascript

解决方案


另一种编写它的方法是使用sort和破坏。

并重用现有参数:

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));
};

我总是更喜欢正确命名的附加变量而不是重用变量名。

using 的优点sort是它表达了所做的事情,并且可以减少可能的错误,因为arr1,arr2在表达式中只使用一次,而不是像在?:

你肯定可以将它与CertainPerformancenew Set的答案结合起来


推荐阅读