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]
是否有必要有两个变量arrLongest
和arrShortest
?或者有没有别的办法。
解决方案
另一种编写它的方法是使用sort
和破坏。
并重用现有参数:
const findSimilar = (arr1, arr2) => {
[arr1, arr2] = [arr1, arr2].sort((a, b) => a.length - b.length)
return arr2.filter((arrLongestItem) => arr1.includes(arrLongestItem));
};
或者留下来arrShortest
,arrLongest
因为它会更详细地说明变量所包含的内容。
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
的答案结合起来
推荐阅读
- kotlin - Heroku 上的 Ktor Websockets - OutOfMemoryError:无法创建本机线程
- stata - 从 centile 命令保存百分位数
- mysql - 使用内部连接(Node,js,typescript)使用tyeporm返回多个对象类型
- powershell - 在 Powershell 中进行 if 条件检查
- reactjs - 如何从 /color/random API 获取随机数?
- reactjs - 如何修复工具提示以在 Dialog Hook 之外显示
- python - Mac 上的权限被拒绝
- yaml - 使用 yq 将对象添加到现有字段
- android - 带有 Paging 3 库的 Facebook Shimmer 库
- javascript - 嵌套 for 循环:带有碰撞检测的错误 javascript p5.js