JavaScript小技巧总结 面试

Js 数组去重

1. 利用 indexOf 实现数组去重

var arr = ['abc','2','ss','cc','ss','您好','您好'];
//定义一个新的数组
var newArr = [];
//遍历数组
for(var i=0;i<arr.length;i++){
    if(newArr.indexOf(arr[i]) == -1){  //判断在 newArr 数组中是否存在,不存在则 push 到 newArr 数组中
        newArr.push(arr[i]);  //push到newArr数组中
    }
}
console.log(newArr);
//输出结果:['abc','2','ss','cc','您好']

关于 indexOf() 方法:

indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。

stringObject.indexOf(searchvalue,fromindex)

该方法将从头到尾地检索字符串 stringObject,看它是否含有子串 searchvalue。开始检索的位置在字符串的 fromindex 处或字符串的开头(没有指定 fromindex 时)。如果找到一个 searchvalue,则返回 searchvalue 的第一次出现的位置。stringObject 中的字符位置是从 0 开始的。

如果在数组中没找到字符串则返回 -1。

关于push() 方法:

push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。

注意: 新元素将添加在数组的末尾。

注意: 此方法改变数组的长度。

2. Js数组去重

思路:

1. 创建一个新的数组存放结果;

2. 创建一个空对象;

3. for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。

说明:

至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。

var arr=[1,2,3,4,3,2,1,23,12,12];
//创建一个新数组来存放结果
var newArr=[];
//创建一个空对象
var json={};
for(var i=0;i<arr.length;i++){
    //如果 json 中没有该元素
    if(!json[arr[i]]){
        //则追加到 newArr 中
        newArr.push(arr[i]);
        //并且对json中的属性赋值 1
        json[arr[i]]=1;
    }
}
console.log(newArr);  //1,2,3,4,23,12

3. Es6 Set 方法去重 特别好用!

因为 Set 的唯一性,也可用作数据去重;利用 Array.from 将 Set 结构转换成数组。

var arr = [1,2,3,4,1,2,3,4,5,6,7];
var set = new Set(arr);
var unique = Array.form(set);
console.log(unique); //1,2,3,4,5,6,7

Set 也可实现交集和并集。拓展运算符(...)内部使用 for...of 循环

let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
let union = new Set([...a, ...b]);
union;// [1, 2, 3, 4]let intersect = new Set([...a].filter(x => b.has(x)));
intersect;// [2, 3]

求数组中的平均值

var arr=[1,2,3,4,5,7,8,9,60];
var sum=0; //存数组总和
for(var i=0;i<arr.length;i++){
    sum+=arr[i];
}
var average=sum / arr.length; /*用数组总和除以数组元素个数*/
console.log(average);

js 判断对象是否为空对象的几种方法

1. 将 json 对象转化为 json 字符串,再判断该字符串是否为 "{}"

var data = {};
var b = (JSON.stringify(data) == "{}");
alert(b);//true

2. for in 循环判断

var obj = {};
var b = function() {
    for(var key in obj) {
        return false;
    }
    return true;
}
alert(b()); //true

3. jquery 的 isEmptyObject 方法

此方法是 jquery 将 2 方法 (for in) 进行封装,使用时需要依赖 jquery。

var data = {};
var b = $.isEmptyObject(data);
alert(b); //true

4. Object.getOwnPropertyNames() 方法

此方法是使用 Object 对象的 getOwnPropertyNames 方法,获取到对象中的属性名,存到一个数组中,返回数组对象,我们可以通过判断数组的 length 来判断此对象是否为空。

注意:此方法不兼容 ie8,其余浏览器没有测试。

var data = {};
var arr = Object.getOwnPropertyNames(data);
alert(arr.length == 0); //true

5. 使用 ES6 的 Object.keys() 方法

与 4 方法类似,是 ES6 的新方法,返回值也是对象中属性名组成的数组。

var data = {};
var arr = Object.keys(data);
alert(arr.length == 0); //true

冒泡排序

第一次就把最大值排在最后面了,依次类推

let arr1 = [33,22,21,41,5,1];
function bubbleSort(arr) {
  var len = arr.length;
  for(var i = 0; i < len; i++) {
    for (var j = 0; j < len - 1 - i; j++) {
      if (arr[j] > arr[j+1]) {        // 相邻元素两两对比
        var temp = arr[j+1];        // 元素交换
        arr[j+1] = arr[j];
        arr[j] = temp;
      }
    }
  }
  console.log(arr);
  return arr;
}
bubbleSort(arr1);

ajax优缺点、同步和异步区别

ajax优点:

1、页面无刷新,实现按需加载,用户体验非常好;

2、不打断用户的操作,实现异步请求,具备更加迅速的响应能力;

3、可以将服务端的一些行为转嫁到客户端,减轻服务器压力和宽带;

4、不需要借助插件和小程序;

ajax缺点:

1、破环了后退前进功能;

2、安全问题;

3、对搜索引擎支持较弱;

4、破坏程序异常机制;

同步和异步区别:

同步:js 本身是一个阻塞的语言,需要逐行读取代码,如果某一个程序出错,即不再执行后面所有代码;

异步:不管程序相应结果都会执行所有代码;



慢慢总结中...



原文链接:HelloWeb前端网 » JavaScript小技巧总结 面试 » 感谢您的浏览,希望能有所帮助。

欢迎您加入“Helloweb” 学习交流群:HelloWeb-学习交流群 196291215 共同交流并结识同行,在这里说出您的收获与感想或有什么不同的观点,我们期待您的留言,分享,让我们一起进步!

喜欢 ()or分享