面试

数组去重##

Array.from(new Set(arr1)

统计 字符串或数组 中有多少个重复的元素##

var ary = ["a", "d", "d", "f", "g", "5", "7", "8"];
var str = "abcabcaaaaa";
var obj = {};
for(var i = 0; i < str.length; i++) {
	var s = str[i];
	var r = obj[s];
	if(r) {
		obj[s] += 1;
	} else {
		obj[s] = 1;
	}
}
console.log(JSON.stringify(obj));
let count = 0;
let obj = {}; 
arr1.forEach(i=>{
    count = 0;
    arr1.forEach(j=>{
        if(i===j) count++;
    })
    obj[i] = count;//键名为i(数组元素),值为count(出现次数)
})

数组对象排序##

var infoObj = [{
        name: "张三",
            sex: 'female',
            age: 30
        },
        {
            name: "李四",
            sex: 'male',
            age: 20
        },
        {
            name: "王五",
            sex: 'female',
            age: 40
        }
    ];
    // 指定排序的比较函数
    function compare(property,seq) {
        return function(obj1, obj2) {
            var value1 = obj1[property];
            var value2 = obj2[property];
            return (value1 - value2)*seq; // -1 升序排列 
        }
    }
    var sortObj = infoObj.sort(compare("age",1));
    // 1 升序  -1  降序
    console.log(sortObj); //
/// 从小到大按属性b排序
      arr.sort(function(x, y) {
          return x.b < y.b ? -1 : 1;
      });
      console.log(arr);
如果需求是:先按b属性从小到大排序,如果最小中有重复则再按a属性排序
arr.sort(function (x, y) {
    if (x.b < y.b) {
        return -1;
    } else if (x.b === y.b) {
        return x.a < y.a ? -1 : 1;
    } else if (x.b > y.b) {
        return 1;
    }
})

URL参数转换对象##

var parseQueryString = function (url) {
     var reg_url = /^[^\?]+\?([\w\W]+)$/,
              reg_para = /([^&=]+)=([\w\W]*?)(&|$)/g, //g is very important
              arr_url = reg_url.exec(url),
              ret = {};
      if (arr_url && arr_url[1]) {
          var str_para = arr_url[1], result;
          while ((result = reg_para.exec(str_para)) != null) {
              ret[result[1]] = result[2];
          }
      }
      return ret;
  }
  //使用方法:
  var url = "key0=0&key1=1&key2=&key3=http://www.g.cn?a=1&&b=2";
  var obj = parseQueryString(url);
  console.dir(obj);

获取URL的参数的value

function GetUrlParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
 //构造一个含有目标参数的正则表达式对象
	var r = window.location.search.substr(1).match(reg);
	 //匹配目标参数
	if(r != null) return unescape(r[2]);
	return null; //返回参数值
}


----------
//传参数之前对中文的url参数进行 
window.location = 
encodeURI(encodeURI("xxx.html?title=" + "中文"));
//接收参数的地方 
decodeURI(GetUrlParam('title'));

js兼容浏览器方法##

click

阻止事件冒泡的兼容性写法
stopPropagation: function(event){
  if (event.stopPropagation){
   event.stopPropagation();
  } else {
   event.cancelBubble = true;
  }
 }
 
创建XMLHttpRequest 
	if (window.XMLHttpRequest) {
   req = new XMLHttpRequest();
 } else if (window.ActiveXObject) {
   req = new ActiveXObject("Microsoft.XMLHTTP");
 }
 
 事件绑定
 function add(obj,event){
    if (obj.addEventListener) {
        obj.addEventListener(event,fn,fase);
    }else{
        obj.attachEvent("on"+event,fn);
    }
}

addEventListener()兼容firefox、chrome、safari、opera、IE9+
attachEvent()兼容IE7,8

深拷贝与浅拷贝

1.浅拷贝
	JavaScript存储"对象"都是存地址的,所以浅复制会导致 a 和 b 指向同一块内存地址
	数组的赋值其实相当于给了索引,改变其中一个变量其他引用都会改变
	
	var a = [1,2,3];  
	var b = a;  
	b[0] = 4;  
	//a为4 2 3  
	//b为4 2 3  
	

变量赋值和变量作为参数传递

	基本数据类型(深拷贝->改变副本中的数据,对前者没有任何影响):
	包括str、num、boolean、null、undefined 
	引用类型(浅拷贝->改变副本中的数据,对前者有任何影响) 
	:就是对象。包括object、Array、function、date
	

	var a = 4;
	var b = a;
	b = 6;
	console.log(a);//4

	var a = 5;
	function num(x) {
		x = 6;
		console.log(x);//6
	}
	num(a);
	console.log(a);//5
	
	将变量传入函数相当于复制一个变量,然后把这个复制的变量传入到函数中。
	a是一个数字类变量,它的复制对象跟它之间没有任何联系。
	在函数内部改变a的值并不会改变函数外a的值。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值