[英]Is there a native way to parse a JavaScript object?
假設我想訪問abcd
,我不確定b
或c
存在。 '天真'檢查將是:
if (a.b && a.b.c && a.b.c.d == 5) doSomething(a.b.c.d);
我考慮過這個並編寫了這個改進這個的函數:
Object.prototype.parse = function (keys, def) {
return keys.split('.').reduce(function (prev, curr) {
if (prev) {
return prev[curr];
}
}, this) || def;
};
你會像這樣使用它:
var a = {
b: {
c: {
d: 5
}
}
};
console.log(a.parse('b.c.d', 3)); // If b, c or d are undefined return 3
但我想知道我是否缺少一種更好的本地方式來實現這一目標,而不必將此功能添加到項目中。
謝謝!
也許不是你所要求的,但可能與你所能得到的“原生”接近(你提供的一個稍微更緊湊的split / reduce代碼片段):
var a = {b:{c:{d:5}}};
("b.c.d").split(".").reduce(function(p,c){return p && p[c];},a); //5
("b.c.e").split(".").reduce(function(p,c){return p && p[c];},a); //undefined
如果你希望找到一個像"abcd"
這樣的字符串的解決方案,那么你需要使用eval
(不是重新編排)或者a
對象需要是全局的(也不推薦)或者對象需要是屬性另一個很難弄巧成拙的對象。
我想我有另一個解決這個問題的辦法,我試圖在幾分鍾內完成這個。 如果您正在處理窗口范圍,則可以使用我的函數來查看對象是否存在或返回默認值。
function parseObj(obj){
try{
return eval(obj);
}catch(e){
return null;
}
}
用法
alert(parseObj("a.b.c.d"));
我不知道這是不是你要找的,但我相信它會給你另一個想法。 干得好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.