簡體   English   中英

如何避免在Javascript中測試是否存在要添加到大循環中的字符串的元素?

[英]How to avoid testing for the existence of an element to add to a string in a large loop in Javascript?

我正在從json輸入和模板構建HTML字符串。

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 = [] ,那么我現在正在為每個elem添加undefined,因為用戶沒有指定類。

問題
是通過檢查if classes[i] !== undefined ...來避免“未定義”條目的唯一方法if classes[i] !== undefined ...還是有一種更簡單的方法來“只添加一個類,如果有一個”?

謝謝!

有幾種方法,這是一個更簡單的方法:

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

這使用了奇怪的強大|| 如果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]);
   // ...
}

嘗試:

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]是假的 ,請插入一個空字符串”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM