• map(): 返回一个由回调函数的返回值组成的新数组
    • filter(): 将所有在过滤函数中返回 true 的数组元素放进一个新数组中并返回
    • find(): 找到第一个满足测试函数的元素并返回那个元素的值,如果找不到,则返回 undefined。
    • findIndex(): 找到第一个满足测试函数的元素并返回那个元素的索引,如果找不到,则返回 -1。
    • every(): 如果数组中的每个元素都满足测试函数,则返回 true,否则返回 false。
    • some(): 如果数组中至少有一个元素满足测试函数,则返回 true,否则返回 false。
    • reduce(): 从左到右为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的返回值
    1. /*
    2. 实现map()
    3. */
    4. export function map (array, callback) {
    5. const arr = []
    6. for (let i = 0; i < array.length; i++) {
    7. arr.push(callback(array[i], i))
    8. }
    9. return arr
    10. }
    11. /*
    12. 实现filter()
    13. */
    14. export function filter(array, callback) {
    15. const arr = []
    16. for (let i = 0; i < array.length; i++) {
    17. if (callback(array[i], i)) {
    18. arr.push(array[i])
    19. }
    20. }
    21. return arr
    22. }
    23. /*
    24. 实现find()
    25. */
    26. export function find (array, callback) {
    27. for (let i = 0; i < array.length; i++) {
    28. if (callback(array[i], i)) {
    29. return array[i]
    30. }
    31. }
    32. return undefined
    33. }
    34. /*
    35. 实现findIndex()
    36. */
    37. export function findIndex (array, callback) {
    38. for (let i = 0; i < array.length; i++) {
    39. if (callback(array[i], i)) {
    40. return i
    41. }
    42. }
    43. return -1
    44. }
    45. 实现every()
    46. */
    47. export function every (array, callback) {
    48. for (let i = 0; i < array.length; i++) {
    49. if (!callback(array[i], i)) { // 只有一个结果为false, 直接返回false
    50. return false
    51. }
    52. }
    53. return true
    54. }
    55. /*
    56. 实现some()
    57. */
    58. export function some (array, callback) {
    59. for (let i = 0; i < array.length; i++) {
    60. if (callback(array[i], i)) { // 只有一个结果为true, 直接返回true
    61. return true
    62. }
    63. }
    64. return false
    65. }
    66. /*
    67. reduce()
    68. */
    69. function reduce(array, callback, initValue) {
    70. let acc = initValue;
    71. let startAtIndex = 0;
    72. if (initValue === undefined) {
    73. acc = array[0];
    74. startAtIndex = 1;
    75. }
    76. for (let i = startAtIndex; i < array.length; i++) {
    77. acc = callback(acc, array[i], i, array)
    78. }
    79. return acc;
    80. }