侧边栏壁纸
博主头像
uvdream博主等级

一切皆有可能!

  • 累计撰写 37 篇文章
  • 累计创建 21 个标签
  • 累计收到 18 条评论

【小试牛刀】一点算法

uvdream
2021-09-04 / 0 评论 / 12 点赞 / 354 阅读 / 2,012 字
温馨提示:
本文最后更新于 2022-04-08,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1


var a = { name: "hello" },

  b = { name: "hi" };

function exchange(a, b) {

  var c = b;

  b = a;

  a = c;

  a.name = a.name + "1";

  b.name = b.name + "2";

  console.info(a.name, b.name);

}

exchange(a, b);

console.info(a.name, b.name);



var a = { name: "hello" },

  b = { name: "hi" };

function exchange(a, b) {

  var c = b; //hi

  b = a; // hello

  a = c; //hi

  a.name = a.name + "1";

  b.name = b.name + "2";

  console.info(a.name, b.name); //hi 1 hello2

}

exchange(a, b);

//此时的a和b已经被改变

console.info(a.name, b.name); //hello2 hi1

考察的是基本类型和引用类型,可参考我的博客

2

时间比较题:输入一组时间字符串,求出这组时间中的间隔最小的时间差(分),如输入“23:59" , "00:00",返回 1;假设输入数组的长度大于 2 且小于 2000;



function timeDiff(timeArr) {

  var arr = timeArr

    .map((item) => {

      const [hour, minute] = timePoint.split(":");

      // 先将hour和minute转换为Number类型,再计算时间

      return Number(hour * 60) + Number(minute);

    })

    .sort((val1, val2) => {

      //排序

      return val1 - val2;

    });


  var len = arr.length;

  var min = 1440 - arr[len - 1] + arr[0];

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

    if (arr[i] - arr[i - 1] < min) {

      min = arr[i] - arr[i - 1];

    }

  }


  return min;

}

console.log(timeDiff(["23:50", "00:00", "00:05"]));

3

假如有一个接口 getUersByld(userld),返回用户信息的 json;要求 getUersById 能缓存用户信息,即同样的 userId 请求仅向服务器发送一次,其余从内存中获取,以提高效率。高阶要求:假设有 getUersByIdgetShoollnfoById, getDevicelnfoById ...都需要缓存结果,提供一个通用的辅助函数。



     //接口封装函数

     const User = {

         getUersById: data => {

             return request({

                 url: "/getUersById",

                 method: "post",

                 data

             });

         },

         ....

     };


     // 使用此方法

     cacheFunc('getUersById', data)

     function cacheFunc(type, data) {

         const msg = localStorage.get(type)

         if (!msg)

             Users[type](data).then(res => {

                 res.code === 200 ? localStorage.setItem(type, res.data) : null

             })

         }

     }

4

输入一个数字,交换两位数字,最多交换一次,输出可以得到的最大的数字;如输入:1234 交换 1,4后,得到 4231;


function sortFunc(num) {

  var str = num + "";

  var arr = [];

  var big = [];

  // 切割重组

  for (var i = 0; i < str.length; i++) {

    arr.push(parseInt(str[i]));

    big.push(parseInt(str[i]));

  }

  //排序

  big.sort(function (a, b) {

    return b - a;

  });

  // 寻找替换

  for (var i = 0; i < arr.length; i++) {

    if (big[i] != arr[i]) {

      for (var j = arr.length - 1; j >= 0; j--) {

        if (arr[j] == big[i]) {

          arr[j] = arr[i];

          arr[i] = big[i];

          break;

        }

      }

      break;

    }

  }

  return parseInt(arr.join(""));

}

console.log(sortFunc(1234));
0

评论区