返回

不用 lodash ,写一个简单的工具库也能实现 get 与 merge 函数

前端

lodash 概述

Lodash 是一个流行的 JavaScript 库,提供了许多有用的函数,例如 get 和 merge。这些函数使 JavaScript 开发人员更容易处理对象和数组。

  • get 函数:
    • 用于从对象中获取值。
    • 语法:get(object, path, [defaultValue])
    • 参数:
      • object:要获取值的对象。
      • path:要获取值的路径。
      • defaultValue:如果路径不存在,则返回的默认值。
  • merge 函数:
    • 用于将多个对象合并为一个对象。
    • 语法:merge(...objects)
    • 参数:
      • objects:要合并的对象。

自己实现 get 与 merge 函数

虽然 Lodash 提供了强大的功能,但它也相对比较庞大。如果你只需要使用其中少数几个函数,那么使用 lodash 可能不是一个好主意。因为你会加载很多你不需要的代码。

你可以选择自己实现 get 和 merge 函数。这并不难,而且可以让你更好地理解这两种函数是如何工作的。

实现 get 函数

function get(object, path, defaultValue) {
  if (object == null) {
    return defaultValue;
  }
  const pathArray = path.split(".");
  let result = object;
  for (let i = 0; i < pathArray.length; i++) {
    const key = pathArray[i];
    if (result[key] === undefined) {
      return defaultValue;
    }
    result = result[key];
  }
  return result;
}

实现 merge 函数

function merge(...objects) {
  const result = {};
  for (const object of objects) {
    for (const key in object) {
      if (result[key] === undefined) {
        result[key] = object[key];
      } else if (Array.isArray(result[key]) && Array.isArray(object[key])) {
        result[key] = result[key].concat(object[key]);
      } else if (typeof result[key] === "object" && typeof object[key] === "object") {
        result[key] = merge(result[key], object[key]);
      } else {
        result[key] = object[key];
      }
    }
  }
  return result;
}

使用自己实现的函数

const object = {
  name: "John Doe",
  age: 30,
  address: {
    street: "123 Main Street",
    city: "Anytown",
    state: "CA",
    zip: "12345",
  },
};

const path = "address.city";
const defaultValue = "Unknown";

const city = get(object, path, defaultValue);
console.log(city); // Anytown

const newObject = merge(object, {
  age: 31,
  address: {
    zip: "54321",
  },
});

console.log(newObject);

结论

自己实现 get 和 merge 函数并不难。这可以让你更好地理解这两种函数是如何工作的,而且可以让你在需要的时候使用它们,而不需要加载 lodash 的整个库。

希望这篇博文对你有帮助。如果你有任何问题,请随时在评论区留言。