2013-02-17 29 views
0

我從json輸入和模板構建HTML字符串。如何避免測試一個元素的存在以添加到Javascript中的大循環中的字符串?

JSON看起來就像這樣:

... 
"count": "5", 
"items": { 
    "classes":[], 
    "href": ["index.html","search.html","brands.html","users.html","orders.html"], 
    ... 
} 

這我在Javascript期待通過這樣的:

for (i = 0; i < dyn.list.count; i += 1) { 
    elem = util.getTemplate('tmp_navbar_element', temps) 
    .replace('class_abc"','class_abc '+dyn.list.items.classes[i]+'"') 
    .replace("href='","href='"+dyn.list.items.href[i]) 
    ... 
} 

一切工作還好吧,但我不知道的最好的方法處理不在JSON配置中傳遞的元素。

例如,如果classes = [],現在我將undefined添加到每個elem因爲用戶沒有指定一個類。

問題
是避免通過檢查if classes[i] !== undefined ...還是有更簡單的方法:「如果有一個只添加一個類」,「不確定」條目的唯一途徑?

謝謝!

+1

我想你可以用''tmp_gridcount'+(dyn.list.items.classes [i] ||'')+'「''作弊,它會輸出空字符串而不是'undefined'。 – Matt 2013-02-17 14:25:28

+0

ah ,是的,類似這樣的,爲什麼會被認爲是作弊? – frequent 2013-02-17 14:25:51

+2

爲什麼你要循環訪問'count'?只需迭代兩個數組。 – Bergi 2013-02-17 14:26:09

回答

1

嘗試:

for (i = 0; i < dyn.list.count; i += 1) { 
    elem = util.getTemplate('tmp_navbar_element', temps) 
    .replace('tmp_gridcount"','tmp_gridcount '+(dyn.list.items.classes[i] || "")+'"') 
    .replace("tmp_gridcount",abc[i]) 
    ... 
} 

改性說: 「如果dyn.list.items.classes [i]是falsy,插入一個空字符串,而不是」 。

+0

當你發佈時(我只有6分鐘),我已經半途而廢了。更正了最後一部分。 – Jack 2013-02-17 14:45:50

1

有幾種方法,這是簡單的人之一:

.replace('class_abc"','class_abc ' + (dyn.list.items.classes[i] || "") + '"') 

使用該curiously powerful || operator使用""如果dyn.list.items.classes[i]undefined(或null,或0,或false,或[可笑] "" )。

當然,這意味着你仍然在做一個你可能會避免的replace。一個較爲平淡的版本是:

var cls; 
for (i = 0; i < dyn.list.count; i += 1) { 
    elem = util.getTemplate('tmp_navbar_element', temps); 
    cls = dyn.list.items.classes[i]; 
    if (cls) { 
    elem = elem.replace('class_abc"','class_abc '+cls+'"'); 
    } 
    elem = elem.replace("href='","href='"+dyn.list.items.href[i]); 
    // ... 
} 
+0

所以最快更快?5x if(cls)或5x「empty replace」? – frequent 2013-02-17 14:29:54

+0

@frequent:它的問題的可能性非常低,是浪費你的時間::-)我會猜測'if'版本會更快,但是當人們(包括我)猜測JavaScript性能問題的答案時,他們往往是錯誤的。你真的可以使用http://jsperf.com查找(但請務必在目標瀏覽器上進行測試,因爲答案經常因所涉及的瀏覽器而異)。但是,再一次,除非你在循環中做了這麼多次,否則沒關係。 – 2013-02-17 14:31:34

+0

好。 :-D謝謝 – frequent 2013-02-17 14:32:32

相關問題