繁体   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