一些常见的js编程题
1、实现数组乱序
var a = [1,2,3,4,5,6,7,8,9,0,12,23,45,90]; a.sort(function (a,b) { var sign = (Math.random()>0.5) ? 1 : -1; return (a-b)*sign; });
2、reduce的使用
//有一个长度为100的数组,请以优雅的方式求出该数组的前10个元素之和 var b = [1,2,3,4,5,6,7,8,9,10]; var sum = b.slice(0,10).reduce(function (pre,cur) { return pre + cur; },0);
3、有一个长度为100的数组,值为其所在位置的索引
var a = new Array(100); a = a.join(",").split(",").map(function(item, index) { return index; });
4、如何消除数组中重复的元素
function deRepeat(arr) { let newArr = []; arr.map(function (item) { if(newArr.indexOf(item) === -1){ newArr.push(item); } }); return newArr; }
5、对象的深浅拷贝
浅拷贝:只是拷贝了基本类型的数据,对于数组或对象的话,拷贝的只是其内存地址,因此存在原对象被篡改的可能;
function copy(p) { let c = {}; for(let i in p) { c[i] = p[i]; } return c; }
深拷贝
//深拷贝 function deepcopy(p,c) { let d = c || {}; for(let i in p) { if(typeof p[i] === 'object'){ d[i] = (p[i].constructor === Array) ? []:{}; deepcopy(p[i],d[i]); }else { d[i] = p[i]; } } return d; }
ps.Object.assign()方法是浅拷贝。