访问在javascript中使用字符串路径的深层属性和方法

我有一个我一直在使用和工作的代码片段。它在我的应用程序中使用很多,我需要加快速度。以字符串路径深入访问对象是否有更好的方法?它需要能够访问的属性和方法,请参阅我下面的例子:访问在javascript中使用字符串路径的深层属性和方法

 function get(obj, path) { 

var paths = path.split('.'),

curProp = obj;

for(var i=0;i<paths.length;i++){

if (!curProp[paths[i]]) return

curProp = (typeof curProp[paths[i]] !== "function") ? curProp[paths[i]] : curProp[paths[i]]() ;

}

return curProp;

}

的片段通过该对象的路径将继承属性传递

var obj = {contact:{name:"john"}}; 

console.log(get("contact.name",obj));

如果对象有一个返回的方法反对它可以返回太

var obj = {contact:function(){return {name:"john"}}}; 

console.log(get("contact.name",obj));

回答:

你的问题的本质 - 即,访问深性编程 - 显示你正在接近函数式编程与自己的IDE至于它应该如何工作。

功能风格的程序不会以这种方式使用对象。即使我们可以用功能性风格(下面)来表达程序,无论使用get函数的程序的任何部分都应该重构,而不是使用动态对象和动态对象查找。

同样,使用方法来存储对象的值也来自面向对象的风格。一旦你停止思考OO风格的事情,你就会开始看到功能风格的独特优势。

const recur = (...values) =>  

({ tag: recur, values })

const loop = (f) =>

{

let acc = f()

while (acc && acc.tag === recur)

acc = f (...acc.values)

return acc

}

const get = (obj = {}, path = []) =>

loop ((o = obj, [p, ...ps] = path.split ('.')) =>

(p === undefined)

? o

: o[p] === undefined

? undefined

: recur (o[p], ps))

const data =

{ a: { b: { c: 1, d: null } } }

console.log (get (data, 'a')) // { b: { c: 1 } }

console.log (get (data, 'a.b')) // { c: 1 }

console.log (get (data, 'a.b.c')) // 1

console.log (get (data, 'a.b.c.')) // undefined

console.log (get (data, 'd')) // undefined

console.log (get (data, 'a.b.d')) // null

以上是 访问在javascript中使用字符串路径的深层属性和方法 的全部内容, 来源链接: utcz.com/qa/266422.html

回到顶部