2014-09-04 17 views
0

我在骨幹應用程序中構建了一個JSON對象,但是如果某個值爲空,它將被寫爲未定義的,這打破了其他方法的行爲,我需要將未定義的值設置爲空字符串,並且遇到麻煩,任何幫助都將不勝感激。使用空字符串替換未定義的值

注:在這種情況下,我想的值值設置:爲空字符串如果obj [關鍵] =未定義

代碼:

parse: function(data){ 
    return data.map(function(obj){ 
     var key = Object.keys(obj)[0]; 
     return { 
     attribute: key, 
     value: obj[key] 
     }; 
    }); 
} 

toQueryString: function(){ 
    var obj = this.toQueryData(), 
    qs = []; 
    for (key in obj) { 
    qs.push(key + "=" + obj[key]); 
    } 
    return qs.join('&') 
}, 
toQueryData: function(){ 
    return this.reduce(function(memo, model){ 
    memo[model.get('attribute')] = model.get('value'); 
    return memo 
    }, {}); 
} 

回答

1

您需要檢查對象是否具有屬性 - 鍵。

value: obj.hasOwnProperty(key) && obj[key] != undefined ? obj[key] : "" 

//或者你可以寫這樣的(這我喜歡,覺得括號語法有點醜陋):

value: obj.hasOwnProperty(key) && obj.key != undefined ? obj.key : "" 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

+0

hmm,我試過這個,但它仍然分配一個未定義的值值: – 2014-09-04 20:41:47

+1

現在我檢查未定義的值也。 – marko 2014-09-04 20:50:03

2

使用三元條件:

value: obj[key] ? obj[key] : "" 

或(如@Derek朕會功夫指出),

value: obj[key] || "" 
+1

或者相當於'obj [key] || 「''' – 2014-09-04 20:38:08

+0

@Derek朕會功夫 - 是的 - Idk爲什麼,但在這些情況下我總是忘記'||'。 – tymeJV 2014-09-04 20:38:47

+0

我已經編輯了我的問題,在嘗試您的答案後,我仍然得到一個未定義的值 – 2014-09-04 20:54:27

1

由於您使用骨幹你可以使用下劃線defaults方法:

return _.defaults({attribute: key, value: obj[key]}, {value: ''}); 
0
toQueryString: function(){ 
    var obj = this.toQueryData(), 
    qs = []; 
    for (key in obj) { 
    qs.push(key + "=" + (obj.hasOwnProperty(key) && obj.key != undefined ? obj.key : "")); 
    } 
    return qs.join('&') 
} 

這最終成爲解決方案,謝謝Marko!