📅  最后修改于: 2023-12-03 14:38:59.534000             🧑  作者: Mango
_.get
是 Lodash 一个非常常用的函数,它用于安全地获取深层次对象的属性,可以避免由于属性不存在而导致程序抛出异常。但是,在某些情况下,您可能无法使用 Lodash 或不想使用它。那么有哪些替代方案呢?
在 JavaScript ECMA2020 中引入了 Optional chaining(可选链),可以用于安全地获取对象或数组深层次的属性值。它使用 ?.
操作符,示例代码如下:
const myObject = {
foo: {
bar: {
baz: 42
}
}
};
const result = myObject?.foo?.bar?.baz; // 42
以上代码会返回值为 42,如果要获取的属性不存在,则返回 undefined。Optional chaining 还可以与其他操作符一起使用,并且可以被嵌套进行更深层的属性访问。
如果你不想使用 Optional chaining 或需要支持更古老的 JavaScript 版本,可以手动实现 Lodash 中的 _.get。
function get(obj, path, defaultValue) {
let result = obj;
for (let i = 0; i < path.length; i++) {
result = result[path[i]];
if (result === undefined) {
return defaultValue;
}
}
return result;
}
// 使用方式:
const myObject = {
foo: {
bar: {
baz: 42
}
}
};
const result = get(myObject, ['foo', 'bar', 'baz'], 'default'); // 42
以上代码首先会遍历属性路径数组,获取对象深层次属性的值。如果属性不存在,则返回默认值。这样您就可以更轻松地安全获取对象的深层次属性了。
如果您不需要获取太深的属性,您也可以使用 ES6 destructuring 语法。这种方法可以将属性从对象中提取到变量中,示例代码如下:
const myObject = {
foo: {
bar: {
baz: 42
}
}
};
const { foo: { bar: { baz: result } = {} } = {} } = myObject;
以上代码会将变量 result
的值设置为 42,如果属性不存在,则返回 undefined。这种方法可以非常方便地获取深层次对象的属性,但只适用于属性数量不太多的情况。
以上三种方法都可以用于安全地获取对象的深层次属性。Optional chaining 是最新的 JavaScript 标准,而手动实现 Lodash 中的 _.get 则适用于更老的 JavaScript 版本和需要更良好的兼容性的场景。使用 ES6 destructuring 语法可以方便地获取较浅的对象属性。