1. 数组方法

1.concat

concat方法创建一个新的数组,它由被调用的对象中的元素组成,每个参数的顺序依次是该参数的元素(如果参数是数组)或参数本身(如果参数不是数组)。它不会递归到嵌套数组参数中。
concat方法不会改变this或任何作为参数提供的数组,而是返回一个浅拷贝,它包含与原始数组相结合的相同元素的副本。

  1. // var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])
  2. // 返回拼接后的数组
  3. var arr1 = ['i', 'l', 'o', 'v'];
  4. var arr2 = ['e', 'y', 'o', 'u'];
  5. var newArr = arr1.concat(arr2);
  6. console.log(newArr);// ['i', 'l', 'o', 'v', 'e', 'y', 'o', 'u']
  7. var arr1 = ['i', 'l', 'o', 'v'];
  8. var arr2 = ['e', 'y', 'o', 'u'];
  9. var arr3 = ['!'];
  10. // 可以拼接多个数组
  11. var newArr = arr1.concat(arr2, arr3);
  12. console.log(newArr); // ['i', 'l', 'o', 'v', 'e', 'y', 'o', 'u', '!']
  13. // concat()不传入参数,则concat 会返回调用此方法的现存数组的一个浅拷贝。
  14. var arr = [
  15. {
  16. name: '张三',
  17. },{
  18. name: '李四'
  19. }
  20. ]
  21. var newArr = arr.concat();
  22. newArr.push({name:'王二'});
  23. newArr[0].name = '11';
  24. console.log(newArr, arr);

image.png

2. toString

  1. // 一个表示指定的数组及其元素的字符串。包含用逗号分隔的每个数组元素
  2. var arr = ['a', 'b', 'c'];
  3. var str = arr.toString();
  4. console.log(str); // a,b,c
  5. // 当一个数组被作为文本值或者进行字符串连接操作时,将会自动调用其toString方法。
  6. var arr = [1, 2];
  7. console.log(arr + 'b');// 1,2b

3. slice

slice() 方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。

  1. // arr.slice([begin[, end]])
  2. // 俩个参数 => 左闭右开
  3. var arr = [1, 2, 3, 4, 5];
  4. var newArr1 = arr.slice(2);
  5. console.log(newArr1); // [3, 4, 5]
  6. var newArr2 = arr.slice(2, 4);
  7. console.log(newArr2);// [3, 4]
  8. var newArr3 = arr.slice(-2, 4);
  9. console.log(newArr3);// [4]
  10. var newArr4 = arr.slice();
  11. console.log(newArr4);// [1, 2, 3, 4, 5]
  12. var newArr5 = arr.slice(-2);
  13. console.log(newArr5); // [4, 5]

slice 方法可以用来将一个类数组(Array-like)对象/集合转换成一个新数组。你只需将该方法绑定到这个对象上。 一个函数中的 arguments 就是一个类数组对象的例子。

  1. function list(){
  2. // Array.prototype.slice.caLL() === [].slice.call()
  3. // return Array.prototype.slice.call(arguments);
  4. return [].slice.call(arguments);
  5. }
  6. var list1 = list(1, 2, 3);
  7. console.log(list1);// [1, 2, 3]

4. join, split

  1. // join 返回由数组内的元素连接的字符串
  2. var arr = [1, 2, 3, 4];
  3. var newArr = arr.join(' ');
  4. console.log(newArr);// 1 2 3 4
  1. // str.split([separator[, limit]])
  2. // 返回源字符串以分隔符
  3. var str = '1,2,3,4';
  4. var arr = str.split(',', 3);
  5. console.log(arr); // [1, 2, 3]

2. 类数组

  1. function test(){
  2. console.log(arguments);
  3. }
  4. test(1, 2, 3, 4, 5);
  5. var obj = {
  6. '0': 1,
  7. '1': 2,
  8. '2': 3,
  9. '3': 4,
  10. '4': 5,
  11. 'length': 5
  12. }
  13. console.log(obj);

image.png

  1. function test(){
  2. console.log(arguments);
  3. }
  4. test(1, 2, 3, 4, 5);
  5. var obj = {
  6. '0': 1,
  7. '1': 2,
  8. '2': 3,
  9. '3': 4,
  10. '4': 5,
  11. 'length': 5,
  12. 'splice': Array.prototype.splice,
  13. 'push': [].push
  14. }
  15. obj.push(6);
  16. console.log(obj);

image.png

  1. var obj = {
  2. '2': 4,
  3. '3': 25,
  4. 'length': 2,
  5. 'push': Array.prototype.push
  6. }
  7. // push(item) => arr[length] = item
  8. obj.push(1);
  9. obj.push(2);
  10. console.log(obj);

3. 笔试题

  1. // 数组去重
  2. // 添加到Array.prototype
  3. // 方法1
  4. Array.prototype.unique = function(){
  5. var obj = {};
  6. var arr = []
  7. for(var i = 0; i < this.length; i++){
  8. var item = this[i];
  9. if(item in obj){// 也可以用obj.hasOwnProperty(item)
  10. }else{
  11. obj[item] = item;
  12. arr.push(item);
  13. }
  14. }
  15. return arr
  16. }
  17. Array.prototype.unique = function(){
  18. var obj = {};
  19. var arr = []
  20. for(var i = 0; i < this.length; i++){
  21. var item = this[i];
  22. if(!(item in obj)){
  23. obj[item] = item;
  24. arr.push(item);
  25. }
  26. }
  27. return arr
  28. }
  29. var arr = [1, 2, 3, 4, 2, 4, 3, 'a', 'a'];
  30. var arr1 = arr.unique();
  31. console.log(arr1);
  32. // 方法2
  33. Array.prototype.unique = function(){
  34. var arr = [];
  35. for(var i = 0; i < this.length; i++){
  36. var item = this[i];
  37. if(arr.indexOf(item) === -1){
  38. arr.push(item);
  39. }
  40. }
  41. return arr
  42. }
  1. // 封装typeof
  2. // undefined object string boolean number function
  3. // null
  4. // [object Array]
  5. // [object Object]
  6. // [object Number]
  7. // [object String]
  8. // [object Boolean]
  9. // [object Date]
  10. // [object RegExp]
  11. // [object Function]
  12. function myTypeof(val){
  13. var type = typeof(val);
  14. var toStr = Object.prototype.toString;
  15. var allTypes = {
  16. '[object Array]': 'object-array',
  17. '[object Object]': 'object-Object',
  18. '[object String]': 'object-String',
  19. '[object Number]': 'object-Number',
  20. '[object Date]': 'object-Date',
  21. '[object RegExp]': 'object-RegExp',
  22. '[object Function]': 'object-Function',
  23. '[object Boolean]': 'object-Boolean',
  24. };
  25. if(type !== 'object'){
  26. return type;
  27. }else{
  28. if(val === null){
  29. return null;
  30. }else{
  31. return allTypes[toStr.call(val)];
  32. }
  33. }
  34. }