一、封装myUnshift方法

1.1、利用循环

  1. // 封装myUnshift方法
  2. // 方法一
  3. Array.prototype.myUnshift = function(){
  4. var pos = 0;
  5. for(var i = 0; i < arguments.length; i++){
  6. this.splice(pos, 0, arguments[i]);
  7. pos++;
  8. }
  9. return this.length;
  10. }
  11. var arr = [3, 4, 5];
  12. arr.myUnshift(1, 2);
  13. console.log(arr);

1.2、把类数组转换为数组,然后借用数组拼接的方法

  1. // 封装myUnshift方法
  2. // 方法二: 把类数组转换为数组,然后借用数组拼接的方法
  3. Array.prototype.myUnshift = function(){
  4. var argArr = Array.prototype.slice.call(arguments);
  5. var newArr = argArr.concat(this);
  6. return newArr;
  7. }
  8. var arr = [3, 4, 5];
  9. console.log(arr.myUnshift(1, 2));

二、数组元素按照字节数排序

  • unicode 0~255 是一个字节;255~是两个字节 ```javascript

    1. // 数组元素按照字节数排序
    2. // unicode 0~255 是一个字节;255~是两个字节
    3. function getBytes(str){
    4. var bytes = str.length;
    5. for(var i = 0; i < str.length; i++){
    6. if(str.charCodeAt(i) > 255){
    7. bytes++;
    8. }
    9. }
    10. return bytes;
    11. }
    12. var arr = ['我爱你', 'OK', 'Hello', '你说WHAT'];
    13. arr.sort(function(a, b){
    14. return getBytes(a) - getBytes(b);
    15. });
    16. console.log(arr)
  1. <a name="FsRhe"></a>
  2. # 三、封装myTypeof方法
  3. - typeof返回的结果:'number' / 'string' / 'boolean' / 'undefined' / 'object' / 'function'
  4. - 万能数据类型检测:Object.prototype.toString.call
  5. ```javascript
  6. // 封装myTypeof方法
  7. // typeof返回的结果:'number' / 'string' / 'boolean' / 'undefined' / 'object' / 'function'
  8. // 万能数据类型检测:Object.prototype.toString.call
  9. function myTypeof(val){
  10. var type = typeof(val),
  11. toStr = Object.prototype.toString,
  12. res = {
  13. '[object Array]': 'array',
  14. '[object Object]': 'object',
  15. '[object Number]': 'object number',
  16. '[object String]': 'object string',
  17. '[object Boolean]': 'object boolean'
  18. }
  19. if(val === null){
  20. return 'null';
  21. }else if(type === 'object'){
  22. var ret = toStr.call(val);
  23. return res[ret];
  24. }else{
  25. return type;
  26. }
  27. }
  28. console.log(myTypeof(null));
  29. console.log(myTypeof(undefined));
  30. console.log(myTypeof(new Number(1)));
  31. console.log(myTypeof([]));
  32. console.log(myTypeof(function(){}));

四、封装一个数组去重的方法

  • 新建一个空对象
  • 新建一个空数组
  • 循环要去重的数组,利用对象属性名不能重复的特性,来实现数组去重

    1. // 封装一个数组去重的方法
    2. // 新建一个空对象
    3. // 新建一个空数组
    4. // 利用对象属性名不能重复的特性,来实现数组去重
    5. Array.prototype.unique = function(){
    6. var temp = {},
    7. newArr = [];
    8. for(var i = 0; i < this.length; i++){
    9. if(!temp.hasOwnProperty(this[i])){
    10. temp[this[i]] = this[i];
    11. newArr.push(this[i]);
    12. }
    13. }
    14. return newArr
    15. }
    16. var arr = [1,1,1,2,2,3,4];
    17. var res = arr.unique();
    18. console.log(res);

    五、封装一个方法实现字符串去重

    1. // 封装一个方法实现字符串去重
    2. String.prototype.unique = function(){
    3. var temp = {},
    4. newStr = '';
    5. for(var i = 0; i < this.length; i++){
    6. if(!temp.hasOwnProperty(this[i])){
    7. temp[this[i]] = this[i];
    8. newStr += this[i];
    9. }
    10. }
    11. return newStr
    12. }
    13. var str = 'nnnooooolllllltttlyyy';
    14. console.log(str.unique(str));

    六、百度外卖面试题

  • 找到第一次出现不重复的字母

    1. // 找到第一次出现不重复的字母
    2. var str = 'ajahfdjsabljdfbalgfq';
    3. function firstAppear(str){
    4. var temp = {};
    5. for(var i = 0; i < str.length; i++){
    6. if(temp.hasOwnProperty(str[i])){
    7. temp[str[i]]++;
    8. }else{
    9. temp[str[i]] = 1;
    10. }
    11. }
    12. for(var key in temp){
    13. if(temp[key] === 1){
    14. return key;
    15. }
    16. }
    17. }
    18. var res = firstAppear(str);
    19. console.log(res);

    七、优化下面程序

    ```javascript

    1. // 优化下面程序
    2. function test(day){
    3. switch(day){
    4. case 1:
    5. console.log('周一');
    6. break;
    7. case 2:
    8. console.log('周二');
    9. break;
    10. case 3:
    11. console.log('周三');
    12. break;
    13. case 4:
    14. console.log('周四');
    15. break;
    16. case 5:
    17. console.log('周五');
    18. break;
    19. case 6:
    20. console.log('周六');
    21. break;
    22. case 7:
    23. console.log('周日');
    24. break;
    25. default:
    26. console.log('我不知道');
    27. }
    28. }
    29. test(1);
    30. test(9);
    31. // 数组边界的判断
    32. var arr = [1,2,3,4];
    33. console.log(arr[4]);
    34. // 利用数组来优化
    35. function week(day){
    36. var weekArr = ['周一','周二','周三','周四','周五','周六','周日'];
    37. weekArr[day-1] !== undefined ?
    38. console.log(weekArr[day-1])
    39. :
    40. console.log('我不知道');
    41. }
    42. week(1);
    43. week(6);
    44. week(9);
    45. // 现在我不想用day-1的形式,想传入什么就数组星期几,利用数组的特性应该怎么做?
    46. // 稀松数组:数组不一定每一项都需要值
    47. function week(day){
    48. var weekArr = [,'周一','周二','周三','周四','周五','周六','周日'];
    49. weekArr[day] !== undefined ?
    50. console.log(weekArr[day])
    51. :
    52. console.log('我不知道');
    53. }
    54. week(1);
    55. week(6);
    56. week(9);

```