您现在的位置:首页 >> 前端 >> 内容

关于数组去重的方法讲解

时间:2018/3/21 13:37:45 点击:

  核心提示:最近的一道面试题: 得到 class id tagName!DOCTYPE htmlhtmlheadmeta charset=UTF-8titleDocument/title/headbodyp id...

最近的一道面试题: 得到 class id tagName

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <p id="page">
        <p class="content main">
            <p class="refer">
                <ul>
                    <li></li>
                    <li></li>
                </ul>
             </p>
        </p>
    </p>
</body>
</html>
<script>
  /* 根据上述HTML结构,完善如下JavaScript代码中的“your code here”部分,使得click事件中的注释要求符合预期:
*/
    var genCssSelector = function(){
        //your code here
    }

    document.addEventListener('click', function(e){

    //点击li时,返回:html body #page .content.main .refer ul li

    console.log(genCssSelector(e.target));

}) 
</script>

方法一 用对象加属性方法避免数组元素重复

var genCssSelector = function(){
    //your code here

    var len = arguments.length,
        str = {},
        a = arguments;

    for (var i = 0; i < len; i++) {

        if(a[i].tagName.toLowerCase() == 'head' || 
           a[i].tagName.toLowerCase() == 'script' ||
           a[i].tagName.toLowerCase() == 'style') {
            continue;
        }

        if(a[i].className) {
            var arr = a[i].className.split(' ');
            arr.forEach(function(data) {
                str['.' + data] = 0;
            });
        } else if(a[i].id){
            str['#' + a[i].id] = 0;
        } else {
            str[a[i].tagName.toLowerCase()] = 0;
        }
        if(a[i].children.length !== 0){
            str[genCssSelector.apply(null, a[i].children)] = 0;
        }
    }
    return Object.keys(str).join(' ');
}

方法二 同样的思想 用 indexOf()判断

var genCssSelector = function(){
    //your code here

    var len = arguments.length,
        str = [],
        a = arguments;

    for (var i = 0; i < len; i++) {

        if(a[i].tagName.toLowerCase() == 'head' || 
           a[i].tagName.toLowerCase() == 'script' ||
           a[i].tagName.toLowerCase() == 'style') {
            continue;
        }

        if(a[i].className) {
            var arr = a[i].className.split(' ');
            arr.forEach(function(data) {
                if (str.indexOf('.' + data) === -1) {
                    str.push('.' + data);
                }
            });
        } else if(a[i].id){
            if (str.indexOf('#' + a[i].id) === -1) {
                str.push('#' + a[i].id);
            }
        } else {
            if (str.indexOf(a[i].tagName.toLowerCase()) === -1) {
                str.push(a[i].tagName.toLowerCase());
            }
        }
        if(a[i].children.length !== 0){
            str.push(genCssSelector.apply(null, a[i].children));
        }
    }
    return str.join(' ');
}

作者:网络 来源:小曹的博客