繁体   English   中英

如何使用handlebars.js的值过滤此数组?

[英]How do I filter this array using value with handlebars.js?

 <!DOCTYPE html> <html> <head> <title>Page Title</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/2.0.0/handlebars.js"></script> </head> <body> <!--This is our template. --> <!--Data will be inserted in its according place, replacing the brackets.--> <script id="t" type="text/x-handlebars"> {{#each_when profile "gender" "male"}} {{ID}}. {{from}} {{gender}}<br> {{/each_when}} </script> <!--Your new content will be displayed in here--> <div class="content-placeholder"></div> <script> var json = { "profile": [ { "ID": 1, "gender": "male", "from": "Olivia" }, { "ID": 2, "gender": "male", "from": "Meagen" }, { "ID": 3, "gender": "female, male", "from": "Aaron" }, { "ID": 4, "gender": "female", "from": "Aaron" } ] }; Handlebars.registerHelper('each_when', function(list, k, v, opts) { console.log(arguments); var i, result = ''; for(i = 0; i < list.length; ++i) if(list[i][k] == v) result = result + opts.fn(list[i]); return result; }); var t = Handlebars.compile($('#t').html()); $('body').append(t(json)); </script> </body> </html> 

上面代码的结果是:

1. Olivia male
2. Meagen male

但我想要以下内容:

1. Olivia male
2. Meagen male
3. Aaron male

我通过属性过滤对象数组,该属性是一个可以包含多个值的字符串。

有谁能告诉我为什么3. Aaron male没有出现?

ID3的对象不会附加到您的结果中,因为您的帮助程序正在过滤其gender属性不等于"male" 对象3的gender"female, male" ,因此它不通过相等性测试。

如果要检查list[i][k] 包含 v ,则必须更新逻辑。

var i, result = '', values;

for (i = 0; i < list.length; ++i) {
    values = list[i][k].replace(/\s*,\s*/, ',').split(',');
    if (values.indexOf(v) > -1) {
        result += opts.fn(list[i]);
    }
}

return result;

请注意,我正在使用正则表达式在拆分之前删除“,”旁边的空白字符 - 这样我可以确保我的values数组中的元素不以空格开头或结尾。

此更新将“Aaron”对象附加到输出。 但是,最终结果将是:

1. Olivia male<br>
2. Meagen male<br>
3. Aaron female, male<br>

如果您不希望“女性,男性”为Aaron显示,则表示您并不真正想要渲染对象的gender属性。 相反,您应该将您想要的文本硬编码到模板中:

{{ID}}. {{from}} male<br>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM