2016-09-19 111 views
0

可能是一個愚蠢的問題,假設我有一個像下面的對象,檢查對象內部哪些屬性值最快的方法?

{"Country":"country","Continent":"continent","Province":"","District":"","State":"state","City":""}" 

什麼是檢查最快捷的方式,其性能保持在上述對象中的值,而不使用循環?

,而做這裏面一個for循環工作,

if(typeof someUndefVar == whatever) -- works 

預期輸出:

國家,洲和國家

回答

5
var a = {"Country":"country","Continent":"continent","Province":"","District":"","State":"state","City":""}; 

Object.keys(a).filter(prop => a[prop]); 

這也要看你怎麼想處理0,null,undefined值。

0

您需要使用object.keys()功能,

這樣,

var jsonData= {"Country":"country","Continent":"continent","Province":"","District":"","State":"state","City":""}; 
console.log(Object.keys(jsonData)); 

希望這有助於!

1

您可能會這樣做;

var obj = {"Country":"country","Continent":"continent","Province":"","District":"","State":"state","City":""}; 
 
for (var prop in obj) !!obj[prop] && console.log(prop);

+0

你能解釋的'!! OBJ [道具]'的意思給我?我永遠不會看到雙''' –

+1

@Fadhly Permata它基本上是將falsy或truthy值轉換爲它們的布爾等值。 ''undefined''或''''''或'0'(數字)是JS中的falsy值,如果像'!0'(單個否定)變成'true'那樣完成。所以雙重否定或雙重('!!')將其置於布爾狀態'!! 0'爲'false'。因此'!!「」'(double否定的空字符串)是'false','&&'的第二部分永遠不會被執行。 – Redu

+0

ooooo ...所以我們不需要添加'()'括號來做到這一點?而三重或更多否定例如:'!!! obj [道具]'。我相信如果我的目標是使用'()',例如'!(!(!obj [prop]))' –

0

對不起,你說沒有循環,我很興奮,我很無聊,我得到的功能。

首先我縮短一些名字和我想他們是一種自我說明的:

  • 頭:陣列
  • 尾的第一個元素:所有元件,但第一
  • 的isEmpty:檢查是否一個數組的長度爲0

transform使用回調函數做實際工作,如果鍵數組爲空則不會遞歸。

var data = {"Country":"country","Continent":"continent","Province":"","District":"","State":"state","City":""} 

// plumbing 
var head = (a) => a[0] 
var tail = (a) => a.slice(1) 
var isEmpty = (a) => a.length === 0 

// actual stuff happens here 
var transform = (obj, callback) => { 

    var withval = (keys) => { 

     if(isEmpty(keys)) return 

     var p = head(keys) 

     if(!!obj[p]) callback(p) 

     withval(tail(keys)) 
    } 

    withval(Object.keys(obj)) 
} 

// Logs 
var log = (p) => console.log(p) 
transform(data, log) 

// Array making 
var arr = []; 
var toArr = (p) => arr.push(p) 
transform(data, toArr) 
console.log(arr) 

// Object making 
var obj = {} 
var toObj = (p) => obj[p] = data[p] 
transform(data, toObj) 
console.log(obj) 

結果:

Country 
Continent 
State 
[ 'Country', 'Continent', 'State' ] 
{ Country: 'country', Continent: 'continent', State: 'state' } 
相關問題