javaScript 前端面试题 30天学习计划 ----(第六天)
日常任务
- 前端面试题练习
- 学习习题所提知识点(概念、内容、用法)
- 掌握习题答案
- 用自己的理解解答习题
- 复习前一天所学知识
- 代码操作
- 掌握习题答案
- 记忆知识点(概念、内容、用法)
数组去重? JavaScript 高性能数组去重
- 双重 for 循环: 外层循环遍历元素,内层循环检查是否重复,当有重复值的时候,使用 splice()删除。
var a = [1, 1, 'true', 'true', true, true, 15, 15,
false, false, undefined, undefined, null, null, 0, 0, 'a','a', {}, {}];
for (var i = 0; i < a.length; i++) {
for (var j = i + 1; j < a.length; j++) {
if (a[i] == a[j]) {
a.splice(j, 1);
}
}
}
//或
for (let i = 0; i < a.length; i++) {
if(i!=0 && a[i] == a[i-1]){
a.splice(i, 1);
}
}
console.log(a);
// [1, "true", true, 15, false, undefined, null, 0, "a", {…}, {…}]
- Array.filter() + indexOf: filter检测数值元素,并返回符合条件所有元素的数组,indexOf 来排除重复项。
var a = [1, 1, 'true', 'true', true, true, 15, 15,
false, false, undefined, undefined, null, null, 0, 0, 'a','a', {}, {}];
var b = a.filter(function(item,index){
//判断元素在数组中第一次出现的位置是否与当前索引一致
return a.indexOf(item) === index;
})
console.log(b);
// [1, "true", true, 15, false, undefined, null, 0, "a", {…}, {…}]
- for…of + includes(): for…of遍历数组,新建一个空数组,includes()方法判断元素是否已存在。
var a = [1, 1, 'true', 'true', true, true, 15, 15,
false, false, undefined, undefined, null, null, 0, 0, 'a','a', {}, {}];
var b = [];
for(let key of a){
if(!b.includes(key)){
b.push(key)
}
}
console.log(b);
// [1, "true", true, 15, false, undefined, null, 0, "a", {…}, {…}]
- Array.sort(): 使用 sort() 将数组进行排序,然后比较相邻元素是否相等,从而排除重复项。
var a = [1, 1, 'true', 'true', true, true, 15, 15,
false, false, undefined, undefined, null, null, 0, 0, 'a','a', {}, {}];
a.sort();
var b = [a[0]];
for(let i=1;i<a.length;i++){
if(a[i] != a[i-1]){
b.push(a[i]);
}
}
console.log(b);
//!= [0, 1, 15, {…}, {…}, "a", false, null, true, "true", undefined]
//!== [0, 1, 15, {…}, {…}, "a", false, null, true, "true", undefined]
- new Set(): ES6 新增 Set 这一数据结构,类似于数组, Set 的成员具有唯一性。
var a = [1, 1, 'true', 'true', true, true, 15, 15,
false, false, undefined, undefined, null, null, 0, 0, 'a','a', {}, {}];
var b = Array.from(new Set([...a]));
console.log(b);
//[1, "true", true, 15, false, undefined, null, 0, "a", {…}, {…}]
- for…of + Object: 利用对象的属性不会重复这一特性,校验数组元素是否重复。
var a = [1, 1, 'true', 'true', true, true, 15, 15,
false, false, undefined, undefined, null, null, 0, 0, 'a','a', {}, {}];
var b = [];
var obj = {};
for(let key of a){
if(!obj[key]){
b.push(key);
obj[key] = 1;
}
}
console.log(b);
// [1, "true", 15, false, undefined, null, 0, "a", {…}]