更高级的或者更确切地说是 ES6 版本使用扩展运算符 (...) 。扩展运算符将数组的元素扩展为单独的参数 。
这就是它的样子
const merged = [...arr1, ...arr2];console.log(merged); // [1, 2, 3, 4, 5, 6]
有两种方法:
- 创建一个包含两个数组元素的新数组
- 不要修改原始数组 。
arr1.push(...arr2);console.log(arr1); // [1, 2, 3, 4, 5, 6]
返回 2 个数组之间的差异有以下几种区别:- 非对称的
- 对称的
- 在第一个数组中但不在第二个数组中的元素
- 在第一个数组中但不在第二个数组中的元素,以及在第二个数组中但不在第一个数组中的元素
const arr1 = [1, 2, 3, 4, 5];const arr2 = [3, 4, 5, 6, 7];const difference = arr1.filter(x => !arr2.includes(x));console.log(difference); // [1, 2]
以下是为了获得对称差异:const arr1 = [1, 2, 3, 4, 5];const arr2 = [3, 4, 5, 6, 7];const difference = arr1.filter(x => !arr2.includes(x)).concat(arr2.filter(x => !arr1.includes(x)));console.log(difference); // [1, 2, 6, 7]
这种方法返回一个新数组并且不修改原始数组 。或者,您可以使用 Set 对象及其 .has() 而不是 .includes()
非对称差异:
const set = new Set(arr2);const difference = arr1.filter(x => !set.has(x));console.log(difference); // [1, 2]
对称差异:const set = new Set(arr2);const set1 = new Set(arr1)const difference = arr1.filter(x => !set.has(x)).concat(arr2.filter(x => !set1.has(x)));console.log(difference); // [1, 2, 6, 7]
如何检查数组是否包含重复元素最简单的方法是使用 Set 对象和 size 属性 。Set 对象仅存储唯一值,因此您可以从数组创建一个集合并将该集合的大小与原始数组的大小进行比较 。
如果集合的大小小于数组的大小,则意味着数组包含重复元素 。
以下是您的操作方式:
const arr = [1, 2, 3, 4, 5, 5];const hasDuplicates = new Set(arr).size !== arr.length;console.log(hasDuplicates); // true
您可以使用对象(也称为散列或字典)实现相同的目的当您遍历数组时,您将当前值设置为键,将 true 设置为键的值 。
如果您尝试访问一个键并且那里已经有一个值,则意味着您找到了一个重复项 。
这是其中一种方法:
const hasDuplicates = (arr) => {let hash = {}for(let i = 0; i < arr.length; i++){if(!hash[arr[i]]){hash[arr[i]] = true} else {return true;}}return false}console.log(hasDuplicates(arr)); // true
这两种方法都创建一个新对象(集合或哈希对象)并且不修改原始数组 。它们还具有线性时间复杂度(它们对大型数组很有效) 。如何返回两个数组之间的交集最常见的方法是使用 filter() 和 includes() 。
代码如下:
const arr1 = [1, 2, 3, 4, 5];const arr2 = [3, 4, 5, 6, 7];const intersection = arr1.filter(x => arr2.includes(x));console.log(intersection); // [3, 4, 5]
这种方法返回一个新数组并且不修改原始数组 。作为替代方案,您可以(再次)使用 Set 对象和 .has() 方法
const set = new Set(arr2);const intersection = arr1.filter(x => set.has(x));console.log(intersection); // [3, 4, 5]
你看到模式了吗? 每当使用普通对象解决问题时,您都可以使用 Set创建一个版本,反之亦然 。如何找到数组中最长的字符串为此,您可以使用我们流行的 .reduce() 方法和一个函数来比较这些值 。
比较器函数将当前字符串的长度与前一个最长字符串的长度进行比较,如果更长则返回当前字符串,否则返回前一个最长字符串 。
你可以这样做:
const arr = ['short', 'medium', 'long', 'longest'];const longest = arr.reduce((acc, x) => x.length > acc.length ? x : acc, '');console.log(longest); // 'longest'
这种方法创建一个新变量(acc 或累加器)并且不修改原始数组 。时间复杂度是线性的(意味着它对大型数组是有效的) 。
同样可以通过使用 sort() 方法和扩展运算符 (...) 来更简洁地找到数组中最长的字符串:
const longest = [...arr].sort((a, b) => b.length - a.length)[0];console.log(longest); // 'longest'
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 迅鲲1300t和骁龙865哪个好;迅鲲1300t什么水平?
- 电影|当年内地水平最高的6部喜剧片,全看过的就暴露年龄了
- 信用卡如何提升额度(教你申请一张十万额度信用卡)
- 高质量发展|《高分读书法》:读书没意义?5步阅读法让你提升读解力和思考力
- 如何提高 JavaScript React 项目中的测试覆盖率
- 精通 JavaScript 中的 Async/Await:异步编程实用指南
- 使用 Tailwind CSS 和 JavaScript 的待办事项列表应用程序
- 书有哪些种类(提升自己的书籍排行大全)
- 国考130分什么水平(公务员考试130分高吗)
- 普通话等级有哪些水平……普通话测试多少分是一乙?多少分是一甲?