reduce

김보영·2023년 4월 25일
0
var users = [
  { name: "BY", age: 45 },
  { name: "SJ", age: 26 },
  { name: "ES", age: 27 },
  { name: "YJ", age: 49 },
  { name: "DH", age: 42 },
  { name: "JE", age: 37 },
  { name: "YH", age: 48 },
];

function each(list, iter) {
  for (let i = 0; i < list.length; i++) {
    iter(list[i]);
  }

  return list;
}

var slice = Array.prototype.slice;
function rest(list, num) {
  return slice.call(list, num || 1);
}

function reduce(list, iter, memo) {
  if (arguments.length === 2) {
    memo = list[0];
    list = rest(list);
  }
  each(list, function (val) {
    memo = iter(memo, val);
  });
  return memo;
}

console.log(
  reduce(
    users,
    function (memo, val) {
      return (memo += val.age);
    },
    0
  )
);
console.log(
  reduce([1, 2, 3], function (memo, val) {
    return (memo += val);
  })
);
console.log(
  reduce({ 0: 1, 1: 12, 2: 30, length: 3 }, function (memo, val) {
    return (memo += val);
  })
);

0개의 댓글