javascript - Handlebars helper 比较两个数组并返回差异

标签 javascript html handlebars.js

我是 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/

相关文章:

javascript - 使用 webview 从 JavaScript 调用 Android 中的 Java 方法

javascript - 在 SVG 中动态绘制矩形

javascript - 如何使用 Node.js 和 Express Handbars 的注册助手

rust - 火箭内的 Handlebars helper

javascript - 如何从两个不同的页面引用弹出窗口?

JavaScript 反射

javascript - 插入 div 作为 .lastElementChild 没有 'insertBefore' 没有 jQuery

javascript - (Riot-API) 使用 angularJS 仅从召唤者(按名称)api 调用中获取 id

css - 如何固定第二列的位置?

handlebars.js - 如何在 Handlebars 部分中插入 html block