前端面试题:数组去重(字符去重)

作者:朱峰日期:2014-04-01 11:40:55 点击:169

HTML文件中有一个多行文本输入框:

<textarea id=”hobbiesInput”></textarea>

允许用户在其中输入自己的兴趣爱好,用户有可能用空格,回车,逗号(全半角都可能),顿号来分隔,写一个函数getUserHobbies(),功能是从输入框中拿到用户输入,经过处理后返回一个没有重复的用户兴趣的字符串数组:

例如:
用户输入:“足球”, “篮球”、“游泳”,“读书”、“看漫画”, “篮球”  “游泳”
答案详解:
考察数组去重,标准答案是利用JavaScript对象来做,用两个for循环做去重也行,但是可以继续深入问他,如何降低时间复杂度

第一种对象方法:用while

function getUserHobbies() {
    // 获取输入框里内容,考察最基本的document的用法
    var userInput = document.getElementById("hobbiesInput").value;
    // 把用户输入变成数组,考察简单的正则和数组的常用方法
    userInput = userInput.replace(/[,,、\s]+/g, ',');
    userInput = userInput.split(',');
    // 考察数组去重,标准答案是利用JavaScript对象来做,用两个for循环做去重也行,但是可以继续深入问他,如何降低时间复杂度
    var tmpHash = {};
    var len = userInput.length;
    while (len--) { // 简单的数组循环,用for也正确,用while的可以小加分,可以追问为啥用while。如果他用for的,可以看看是否有把len提前计算出来
        if (userInput[len] != "") {
            tmpHash[userInput[len]] = true;
        }
    }
    var hobbiesArray = [];
    for (var key in tmpHash) {
        hobbiesArray.push(key);
    }
    return hobbiesArray;
}

第一种对象方法:用for

function getUserHobbies() {
    // 获取输入框里内容,考察最基本的document的用法
    var userInput = document.getElementById("hobbiesInput").value;
    // 把用户输入变成数组,考察简单的正则和数组的常用方法
    userInput = userInput.replace(/[,,、\s]+/g, ',');
    userInput = userInput.split(',');

    var tmpHash = {};
    var hobbiesArray = [];
    for (var i = 0; i < userInput.length; i++) {

        var len = userInput[i];
        if (tmpHash[len] !== userInput[i]) {
            tmpHash[len] = len;
            hobbiesArray.push(len)
        }
    }
    alert(hobbiesArray);
}
getUserHobbies();

第二种方法:用两个for循环做

function getUserHobbies() {
    // 获取输入框里内容,考察最基本的document的用法
    var userInput = document.getElementById("hobbiesInput").value;
    // 把用户输入变成数组,考察简单的正则和数组的常用方法
    userInput = userInput.replace(/[,,、\s]+/g, ',');
    userInput = userInput.split(',');
    var hobbiesArray = userInput;
    for (var i = 0; i < hobbiesArray.length; i++) {
        for (var j = i + 1; j < hobbiesArray.length; j++) {
            if (hobbiesArray[i] == hobbiesArray[j]) {
                hobbiesArray.splice(i, 1);
                i = i - 1;
                break;
            }
        }
    }
    alert(hobbiesArray);
}
getUserHobbies();

上一篇: 写一个创建命名空间的函数nameSpace_360的一道面试题

下一篇: JavaScript一道面试题求y的值是? z 的值是? s的值是?