Handlebars助手比较两个数组并返回差异

3

我刚开始接触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"]  
    }

Template

<ul class='featureList'>
    {{#feature}}
        {{#oldFeature}}
            <li class="{{arraysDiff ../oldFeatur ../newFeature}} myclass {{arraysDiff}}">{{.}}</li>
        {{/oldFeature}}
    {{/feature}}  
</ul>

请在您的问题描述中包含更好的样例和代码,这将有助于其他人更好地理解您的确切问题。例如,数组中包含什么?数字?字符串?对象? - veducm
这与JSON无关... - iConnor
1个回答

4

首先,您需要一种计算两个数组差异的方法。根据您要比较的数组类型,您可能需要不同的方法来获取具有差异的数组。在此示例中,我将使用这个其他SO答案中解释的方法。

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}}

感谢您的回复。我认为给出的示例对我有用,否则我会回复您一个正确的示例代码。 - prakashstar42
太好了!如果有问题,请告诉我。同时,如果这个答案对你有帮助,请记得点赞并将其标记为正确答案。谢谢! - veducm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接