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 filter(list, predi) {
  var _list = [];
  each(list, function (val) {
    if (predi(val)) {
      _list.push(val);
    }
  });

  return _list;
}

function map(list, mapper) {
  var _list = [];
  each(list, function (val) {
    console.log(mapper(val));
    console.log(val);
    _list.push(mapper(val));
  });

  return _list;
}

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

  return list;
}

function curryr(fn) {
  return function (a, b) {
    return arguments.length == 2
      ? fn(a, b)
      : function (b) {
          return fn(b, a);
        };
  };
}

var get = curryr(function (obj, key) {
  return obj == null ? undefined : obj[key];
});

console.log(
  map(
    filter(users, function (val) {
      return val.age > 40;
    }),
    get("name")
  )
);

console.log(
  map(
    filter(users, function (val) {
      return val.age > 40;
    }),
    function (val) {
      return get("name")(val);
    }
  )
);

console.log(get(users[0], "name"));

0개의 댓글