深拷贝

  1. /**
  2. * deepClone 深拷贝
  3. * @param {object} origin 源对象
  4. * @param {object} target 目标对象
  5. */
  6. function deepClone (origin, target) {
  7. var tar = target || {},
  8. toStr = Object.prototype.toString,
  9. arrType = '[object Array]';
  10. for (var k in origin) {
  11. if (origin.hasOwnProperty(k)) {
  12. if (typeof origin[k] === 'object' && origin[k] !== 'null') {
  13. tar[k] = toStr.call(origin[k]) === arrType ? [] : {};
  14. deepClone(origin[k], tar[k]);
  15. } else {
  16. tar[k] = origin[k];
  17. }
  18. }
  19. }
  20. return tar;
  21. }

typeof加强版

  1. /**
  2. * myTypeof 加强版typeof
  3. * @param {any} value 需要进行数据类型检测的值
  4. */
  5. function myTypeof (value) {
  6. if (value === null) {
  7. return 'null';
  8. }
  9. return typeof value === 'object' ? {
  10. "[object Object]": "object",
  11. "[object Array]": "array",
  12. "[object String]": "String",
  13. "[object Number]": "Number",
  14. "[object Boolean]": "Boolean"
  15. }[{}.toString.call(value)] : typeof value;
  16. }

数组扁平化

  1. /**
  2. * flatten 数组扁平化
  3. */
  4. Array.prototype.flatten = function () {
  5. var _arr = this,
  6. toStr = {}.toString;
  7. if(toStr.call(_arr) !== '[object Array]'){
  8. throw new Error('Only Array can use it');
  9. }
  10. return _arr.reduce((prev, item) => {
  11. return prev.concat(
  12. toStr.call(item) === '[object Array]' ? item.flatten() : item
  13. )
  14. }, [])
  15. }

数组去重

  1. /**
  2. * removeRe 数组去重
  3. */
  4. Array.prototype.removeRe = function () {
  5. var _arr = this,
  6. _obj = {};
  7. _arr.forEach(item => {
  8. _obj[item] = item;
  9. })
  10. return Object.values(_obj);
  11. }