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

时间:2014-01-28 10:11:51

标签: javascript html handlebars.js

我是handlebars.js的新手,我需要一个把手助手来比较两个数组并返回差异。


我试过这个例子,但它不适合我。我想我犯了一些错误。 请在下面找到我的代码并纠正我。

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

1 个答案:

答案 0 :(得分:3)

您需要的第一件事是计算两个数组差异的方法。根据您要比较的数组类型,您可能需要使用不同的方法来获取具有差异的数组。在此示例中,我将使用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}}