# 实现一个map函数

补充一下JSON.stringify(value, replacer, space)语法:

  1. value: 必需, 要转换的 JavaScript 值(通常为对象或数组)。
  2. replacer: 可选。用于转换结果的函数或数组。如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值,使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。
  3. space: 可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如:\t。
const targetData = {
  a: 2,
  b: 4,
  c: 6,
  d: 7
};

const objMap = (obj, fn) => {
  if (typeof fn !== "function") {
    throw new TypeError(`${fn} is not a function !`);
  }
  
  // 方法1:依次计算fn后的值
  // const copy = Object.assign({}, obj)
  // for (let key in copy) {
  //   copy[key] = fn(key, copy[key])
  // }
  // return copy

  // 方法2:直接使用JSON.stringify(obj, fn)
  return JSON.parse(JSON.stringify(obj, fn));
};

const result = objMap(targetData, (key, value) => {
  if (value % 2 === 0) {
    return value / 2;
  }
  return value;
});

console.log(result);
// { a: 1, b: 2, c: 3, d: 7 }