2016-09-16 84 views
1

我需要找到一個key,其中包含一個對象a。它不應該返回包含數組或字符串的鍵。例如,在a它應該返回我d但不bc如何獲取密鑰包含下劃線中的對象?

a = {"b" : "hi","c":[1,2,3],"d":{"2:":3}}; 

這裏是剪斷我試過了。它返回Object的第一個實例。但我不需要數組實例只是一個字典。

var _ = require(underscore);  
_.findKey(a,_.isObject); 
+1

'_ .isObject'將不起作用,因爲數組是對象。 – Barmar

回答

2

您可以使用普通的JS這個:

var keysThatContainObjects = Object.keys(a).filter(function(k) { 
    return typeof a[k] === "object" && !Array.isArray(a[k]); 
}); //["d"] 

1線

var keysThatContainObjects = Object.keys(a).filter(function(k) { return typeof a[k] === "object" && !Array.isArray(a[k]); }); //["d"] 
+1

如果對象具有「長度」屬性,該怎麼辦?也許最好使用'!Array.isArray(a [k])'... –

+0

@RobM。 - 好點,編輯 - 絕對沒有想到這一點。 – tymeJV

+0

任何方式在一行,,,多數民衆贊成我的興趣!!!!!這就是在下劃線中嘗試它的原因 –

0

我很乾淨的方法是使用pickunderscore

var a = {"b" : "hi","c":[1,2,3],"d":{"2:":3}}; 
var aFiltered = _.pick(a, function() { 
    return _.isObject(value); 
}); 
+0

它甚至選擇一個數組類型...我只需要字典。在return語句中,我們需要否定數組類型。 –