ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Javascript-Handlebars helper比较两个数组并返回差值

2019-11-22 06:44:49  阅读:230  来源: 互联网

标签:handlebars-js html javascript


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

我已经尝试过该示例,但它对我不起作用.我想我在犯一些错误.
请在下面找到我的代码并纠正我.

Java脚本

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

标签:handlebars-js,html,javascript
来源: https://codeday.me/bug/20191122/2057761.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有