gpt4 book ai didi

Javascript 属性检查器函数(使用闭包)

转载 作者:行者123 更新时间:2023-11-30 08:20:59 25 4
gpt4 key购买 nike

我正在尝试编写一个可用于检查对象属性的函数。

例如,对于给定的对象:

var obj = {
s : 'a',
n : 1,
d : new Date(),
f : function(){},
a : [],
o : {
a : {
b: 'b'
}
}
};

我可以使用我的检查器函数来访问属性:

var ins = inspector(obj);
ins('s') // -> a
ins('n') // -> 1
ins('d') // -> 2018-12-06T11:51:26.244Z
ins('f') // -> [Function]
ins('a') // -> []
ins('o') // -> { a: { b: 'b' } }
ins('o.a') // -> { b: 'b' }
ins('o.a.b') // -> b
ins('o.p') // -> undefined
ins('o.p.p') // -> undefined
ins('p') // -> undefined
ins('') // -> undefined

我的第一种方法:

function inspector(obj){
return function fun (prop){
console.log(obj[prop])
}
}

但是,它在某些情况下无法正常工作:

ins('o.a') // -> { b: 'b' }
ins('o.a.b') // -> b
ins('o.p') // -> undefined
ins('o.p.p') // -> undefined

我如何重写我的函数以适应这些情况?

最佳答案

您可以使用reduce 来获取值。首先,你需要通过分割路径。:

function inspector(obj){
return function fun (prop){
return prop.split(".").reduce(function(o, p) { // for each part p in prop.split(".")
return o && o[p]; // if o is an object truthy return o[p]
}, obj); // pass obj as the initial o
}
}

o && 测试非常基础。如果当且仅当 o 是一个对象时,你想给 o 下标,然后将该行替换为:

return (o && typeof o === "object")? o[p]: undefined;

如果 o 是一个对象,则返回 o[p],否则返回 undefined

示例:

function inspector(obj){
return function fun (prop){
return prop.split(".").reduce(function(o, p) {
return (o && typeof o === "object")? o[p]: undefined;
}, obj);
}
}

var obj = {
s : 'a',
n : 1,
d : new Date(),
f : function(){},
a : [],
o : {
a : {
b: 'b'
}
}
};

var ins = inspector(obj);

console.log('s:', ins('s')); // -> a
console.log('n:', ins('n')); // -> 1
console.log('d:', ins('d')); // -> 2018-12-06T11:51:26.244Z
console.log('f:', ins('f')); // -> [Function]
console.log('a:', ins('a')); // -> []
console.log('o:', ins('o')); // -> { a: { b: 'b' } }
console.log('o.a:', ins('o.a')); // -> { b: 'b' }
console.log('o.a.b:', ins('o.a.b')); // -> b
console.log('o.p:', ins('o.p')); // -> undefined
console.log('o.p.p:', ins('o.p.p')); // -> undefined
console.log('p:', ins('p')); // -> undefined
console.log(':', ins('')); // -> undefined

关于Javascript 属性检查器函数(使用闭包),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53660608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com