我是 handlebars.js 的新手,我需要一个 handlebars 助手来比较两个数组并返回差异。
我试过这个例子,但它对我不起作用。我想我犯了一些错误。 请在下面找到我的代码并更正我。
Javascript
var subscriptionInfo = {
subscription : "oldFeature",
feature : {
oldFeature : ["1 Free Projects", "10 MB Storage Space", "Project Feeds","Task Management"],
newFeature : ["10 Free Projects", "1 GB Storage Space", "Project Feeds","Task Management"]
}
模板
<ul class='featureList'>
{{#feature}}
{{#oldFeature}}
<li class="{{arraysDiff ../oldFeatur ../newFeature}} myclass {{arraysDiff}}">{{.}}</li>
{{/oldFeature}}
{{/feature}}
</ul>
最佳答案
您首先需要的是一种计算两个数组差异的方法。根据您要比较的数组类型,您可能需要不同的方法来获取具有差异的数组。在此示例中,我将使用 this other SO answer 中说明的方法.
function arr_diff(a1, a2)
{
var a=[], diff=[];
for(var i = 0; i < a1.length; i++) {
a[a1[i]] = true;
}
for(var i = 0; i < a2.length; i++) {
if (a[a2[i]])
delete a[a2[i]];
else
a[a2[i]] = true;
}
for(var k in a) {
diff.push(k);
}
return diff;
}
然后,您可以注册您的 Handlebars 助手以使用上述方法,如下所示:
Handlebars.registerHelper('arraysDiff', function(arrayA, arrayB, opts)
{
var result = arr_diff(arrayA, arrayB);
return opts.fn(result);
});
最后,您可以在您的 Handlebars 模板中使用这个助手:
{{#arraysDiff this.jsonArray1 this.jsonArray2}}
<!-- Do something with the difference array, e.g. print it -->
{{this}}
{{/arraysDiff}}
关于javascript - Handlebars helper 比较两个数组并返回差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21402620/