1. // Array.prototype.flatMap ES2020
    2. // flat + map
    3. const arr = ["123", "456", "789"];
    4. const newArr = arr.map(function (item) {
    5. console.log(item.split(''));
    6. return item.split('')
    7. });
    8. console.log(newArr.flat());//[1,2,3,4,5,6,7,8,9];
    9. // 遍历 扁平化
    10. // map - > flat
    11. // 效率要高一点
    12. // 返回值是一个心的数组。
    13. const newArr2 = arr.flatMap(function (item) {
    14. return item.split('');
    15. })
    16. console.log(newArr2);//[1,2,3,4,5,6,7,8,9];
    17. // item -> 当前遍历的元素
    18. // 当前遍历的元素在数组中对应的下标
    19. // arr 当前数组
    20. // 回调函数中的this 默认指向window
    21. // 严格模式下 this 为 undefined
    22. // flatMap 的第二个参数可以改为回调函数内this 的指向
    23. const newArr3 = arr.flatMap(function (item,idx,arr) {
    24. })
    25. Array.prototype.myFlatMap = function (cb) {
    26. if (typeof cb !== 'function') {
    27. throw new TypeError('CallBack must be function');
    28. }
    29. // cb(1, 2, 3);
    30. var arg2 = arguments[1],
    31. arr = this,
    32. len = arr.length,
    33. item,
    34. idx = 0,
    35. res = [];
    36. while (idx < len) {
    37. item = arr[idx];// 浅拷贝。
    38. res.push(cb.apply(arg2, [item, idx, arr]));
    39. idx ++;
    40. }
    41. return res;
    42. }