2013-02-17 33 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

相关问题