今天看啥  ›  专栏  ›  Iam_Bling

逻辑性题目

Iam_Bling  · 简书  ·  · 2018-12-22 00:05

如何判断一个字符串中出现次数最多的的字符和出现的次数

var str = "abadsadfscxzvafadefg";
var json = {}
//遍历字符串中每一个字符,作为key放在对象中
for(var i = 0; i < str.length; i++){
    //如果没有当前字符,就添加,value值为1
    if(!json[str.charAt(i)]){
        json[str.charAt(i)] = 1;
    }
    //如果有当前字符,value值加1
    else{
        json[str.charAt(i)]++;
    }
}
//声明一个变量来接受字符,一个变量来接受出现的次数
var string = "";
var num = 0;
//遍历json
for(var i in json){
    //如果当前值大于num,就把当前值赋值给num,
    if(json[i] > num){
        num = json[i];
        string = i;
    }
}
console.log(string + num);

请写出冒泡排序及选择排序算法

冒泡:
for (var i = 0; i < arr.length; i++){
    //每轮执行的次数遍历
    for (var j = 0; j < arr.length - 1 - i; j++){
        if (arr[j] >= arr[j + 1]){
            //比较相邻两个元素,每轮都从下标为0开始,所以是j和j+1比较。比较完之后,交换位置
            var temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
        }
    }
}

选择:
for (var i = 0; i <arr.length; i++){
    //每轮的次数循环
    for(var j = i + 1; j < arr.length; j++){
        //比较i和j 位置元素的大小,进行位置交换。
        if (arr[i] >= arr[j]) {
            var temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }   
    }
}

数组自身排序:
arr3 = [1,2,3,4,5,6];
arr3.sort(function (a, b){
    //从大到小
    if (a > b) {
        return -1;
    }
    else if (a < b) {
        return 1;
    }
    else{
        return 0;
    }
});
console.log(arr3);

数组去重

  1. 创建新的数组利用indexOf判断。
Array.prototype.repeat = function(){
    var arr = [];//创建一个临时数组
    for(var i = 0; i < this.length; i++){
        //如果当前数组的第i已经保存进了临时数组,那么跳过,否则把当前项push到临时数组里
        if(arr.indexOf(this[i]) == -1){
            arr.push(this[i]);
        }
    }
    return arr;
}

2.创建空对象判断对象中是否包含

    Array.prototype.repeat = function(){
    <!--声明一个空数组来存放数组元素-->
    var arr = [];
    var obj = {};
    for(var i = 0; i < this.length; i++){
        <!--利用对象判断是否存在,没有就添加到数组中-->
        if(!obj[this[i]]){
            arr.push(this[i]);
            obj[this[i]] = 1;
        }
    }
    return arr;
}
    
var arr1 = [1,2,3,4,3,4,13,41,31,43,1,2,3,4,2,32,23];
console.log(arr1.repeat());

求两个数的最大公约数和最小公倍数

有点绕,看不懂:
function maxGys(num1,num2){
    var i = +num1, j = +num2, t = j;
    while(j != 0){
        t = i % j;
        i = j;
        j = t;
    }
    return i;
}
console.log(maxGys(15,12)); 

下面的方法容易理解的多:
function f(num1, num2){
    i的初始值为两个数中小的那个值
    for(i = Math.min(num1, num2); i > 0; i--){
        if(num1 % i == 0 && num2 % i == 0){
            return i;
       }
    }
};
console.log(f(12, 8));

最小公倍数同理:
function f(num1, num2){
    for(i = Math.min(num1, num2); i > 0; i--){
        if(num1 % i == 0 && num2 % i == 0){
            return i;
       }
    }
};
console.log(f(12, 8));

输入一个数判断是不是质数

var num = prompt('请输入任意非0正整数');
if(num == 1){
    console.log('1既不是质数也不是合数');
}
for(var i = 2; i <= num; i++){
    if(num % i == 0){
        if(num > i){
            console.log(num + "不是质数");
            break;
        }else{
            console.log(num + "是质数")
        }
    }
}

求出0-n之间的所有质数和

1既不是质数也不是合数

function zhishu(n){
    var num = 0;
    for(var i = 2; i <= n; i++){
        //内层循环用来计算n除以0-n
        for(var j = 2; j <= i; j++){
            //如果取余都等于0了,就跳出内层循环
            if(i % j == 0){
                break
            }       
        }
        //判断如果跳出时的数比i小就说明不是质数,说明除了1和n还有其他能除尽的
        //否则跳出时数就等于n的话,说明是是质数进行叠加的操作
        if(i <= j){
            num = num + i;
        }
    }
    console.log(num)
}
zhishu(100);

输出问题

同步异步回调执行顺序

同步 ==》 异步 ==》 回调

for(var i = 0; i < 5; i++){
    setTimeout(function(){ //回调最后执行
        console.log("2:",i);
    });
    console.log("1:",i); //同步先执行for循环
}
console.log(i);
1:  0
1:  1
1:  2
1:  3
1:  4
5
2:  5
2:  5
2:  5
2:  5
2:  5
var a = 5;
fn();
function fn(){
    console.log(a);
    var a = 8;
    console.log(a);
}
最终结果:undefined、8。
说明:当函数内没有重新声明a的时候第一个输出为全局的5。
<body ng-app="myApp">
    <div ng-controller="ctrl">
        <input type="text" ng-model="a" id="a"/>
    </div>
</body>

var app = angular.module("myApp",[]);
app.controller("ctrl",["$scope",function($scope){
    $scope.a = 1;
    setTimeout(function(){
        $("#a").val(2);
        console.log($scope.a);
        console.log($("#a").val());
    },1000);
}]);
输出结果:1、2;
console.log(1 + '1');//11
console.log(1 - '1');//0
let a = 3;
console.log(window.a);//undefined
var x = 1,y = z = 0;
function add(n){
    return n = n + 1;
}

y = add(x);
function add(n){
    return n = n + 3;
}
z = add(x);
console.log(y);//因为上面的函数被覆盖了。而且调用提前
console.log(z);
var a = "undefined";
var b = false;
var c = "";

function test(val){
    if(val){
        alert(true);
    }else{
        alert(false);
    }
}

test(a);//true
test(b);//false
test(c);//false
var price = 100;
(function fn(){
    var price = price;
    var doubleprice = price * 2;
    var price = 200;
    var halfprice = price / 2;
    alert(price);//200
    alert(doubleprice);//NAN
    alert(halfprice);//100
})();

如何用JS实现JQ的hasClass功能

<div class="haha heihei bobo"></div>


var div = document.getElementsByClassName("haha")[0];//通过class获取元素
function hasClass(obj, cls){
    var obj_class = obj.className;//获取 class 内容.
    var obj_class_arr = obj_class.split(/\s+/);//通过split按照空字符将cls转换成数组。/\s+/正则表达式
    var x = 0;
    for(x in obj_class_arr) {//通过下标遍历数组
        if(obj_class_arr[x] == cls) {//判断数组中是否包含要查询的cls
            return true;
        }
    }
    return false;
}
console.log(hasClass(div,'haha'));//true

封装一个函数清除字符串前后的空格

jQ的trim();

function remove(str){
    return str.replace(/(^\s*)|(\s*$)/,"");
}
console.log(remove('   dhggggg     sajd   '));//dhggggg     sajd
<!--删除所有空格-->
str.replace(/\s/g,"");

获取一堆name名相同的div,点击弹出第几个

var arr = document.getElementsByName("hehe");
 for(var i = 0; i < arr.length; i++){
    arr[i].index = i;
    arr[i].onclick = function(){
        alert(this.index);
    }
}

封装一个函数,把URL参数解析为一个对象

function parseQueryString(url){
    var str = url.split("?")[1];
    var items = str.split("&");
    var result = {};
    var arr = [];
    for(var i = 0; i < items.length; i++){
        arr = items[i].split("=");
        result[arr[0]] = arr[1]
    }
    return result;
}
var obj = parseQueryString("http://www.taobao.com/index.php?key0=0&key1=1&key2=2");
console.log(obj);

封装一个函数,将字符串的每个字符都变成小写,并且用空格隔开,如果之前有空格则保留一个空格

function fn(str){
    var new_str = str.toLowerCase();
    var str2 = "";
    for(var i of new_str){
        if(i != " "){
            i = i + " ";
            str2 = str2 + i;
        }
    }
    console.log(str2);//w a n g j u n w e i
}       
fn("wang JUN WEI");



原文地址:访问原文地址
快照地址: 访问文章快照