2016-11-21 65 views
1

我一直在尋找一種很好的方式來獲得真正的嵌套值,當其中一個屬性可能爲null或未定義時。獲取嵌套值的速記

例子中的物體:

var a = { 
    b: { 
     c: { 
      d: 10 
     } 
    } 
} 

現在,讓我們說,這是該對象具有當它是完全填充,但有時b爲未定義或C或甚至d的結構。在JavaScript的我將可能採取這樣的事情:

var d = a && a.b && a.b.c && a.b.c.d // Now d has value d or some falsy value 

在Immutable.js我可以做以下(這是我找到的方式更乾淨):

var d = a.getIn(['b', 'c', 'd'], null) 

這使我檢索值的d,甚至將最終參數設置爲默認值,如果在路上有任何失敗。

我可以在js中做類似的事嗎?

+1

這樣做,做它....減少()的方法是我會用什麼。 – epascarello

+1

不,沒有內置的速記。這就是Immutable.js背後的人們寫這個函數的原因。 –

回答

4

在檢查值和類型之後,可以用對象減少數組。

function getIn(object, keys, def) { 
 
    return keys.reduce(function (o, k) { 
 
     return o && typeof o === 'object' && k in o ? o[k] : def; 
 
    }, object); 
 
} 
 

 
var a = { b: { c: { d: 10 } } }; 
 

 
console.log(getIn(a, ['b', 'c', 'd'], null)); 
 
console.log(getIn(a, ['b', 'c', 'd', 'e'], null));

+0

這就像你製作underscore.js。 – Mahi

+0

我認爲,這不僅僅是這些。 –

+0

然後嘗試製作新的js。 'nina.js' – Mahi