一些常见的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()方法是浅拷贝。

原文地址:https://www.cnblogs.com/shuqicui/p/2017-6-27.html