【问题标题】:Javascript Loop within a loop Logic to produce Specific output循环中的 Javascript 循环逻辑以产生特定的输出
【发布时间】:2014-04-01 09:30:17
【问题描述】:

我擅长 php,但 javascript 不适合我,我的英语也不是很好,但我会一步一步慢慢地解释一切。 我使用javascript计算电信服务的费用。我知道必须使用与 in php 类似的逻辑,但后来我卡住了。

  /prices is json from server as see below.
var prices  =   [{"brand":"Airtel (Waridtel) Ug","numbering":"25670","price":"40"},
                 {"brand":"UTL ug","numbering":"25671","price":"30"},
                 {"brand":"Airtel Ug","numbering":"25675","price":"40"},
                 {"brand":"MTN Ug","numbering":"25677","price":"20"},
                 {"brand":"MTN Ug","numbering":"25678","price":"20"},
                 {"brand":"Orange Ug","numbering":"25679","price":"30"},
                 {"brand":"Safaricom Ke","numbering":"25470","price":"30"},
                 {"brand":"Safaricom Ke","numbering":"25471","price":"30"}]

用户以逗号分隔字符串提供各种电话号码

   //contacts
   cdest = '245772306640,256754306640,25471624525,2567825689754,2563989654285,4588623566', 256782658974;

我们使用品牌前缀来查找品牌。 如果contacts前缀相当于json中的价格编号,那么就是该品牌拥有的conctact。我根据用户提供的联系人列表计算每个品牌的联系人数量和总成本。

预期输出如下所示。 品牌(联系人数量)::总成本 示例 MTN Ug(3)::60 , Airtel Ug(1), Safaricom Ke(1)::30,

我也喜欢将任何没有品牌的号码放在一个通用品牌下,称为国际,没有价格分配,如下例所示 国际(2)::默认,

这里我对两个循环很困惑,我不明白我如何循环、计数和回显,但我擅长传递 php 知识到目前为止我创建了双循环,但后来我又混淆了。

//explode numbers;
dest =  cdest.split(",");

// loop through brands and numbers. 
//plan is to create create array like (brand1 =>countbrand1,brand2=>countbrand3, etc)

cd = Array();
for( var i=0; i<dest.length; i++ )
{
    $x.each(prices, function(index, m) {
        if(dest[i].indexOf(m.numbering)==0)
        {
            cd[m.brand]+=1; 
        } else
        cd[International]+=1;
        });
}

在 php 中,我现在只需在 cd 上循环并获取输出。我尝试使用 js,但不知道如何在 Javascript 中回显数组的键。 javascript 整天欺负我。如果你回答得好,请你一步一步慢慢展示。非常感谢。

【问题讨论】:

    标签: javascript arrays multidimensional-array echo


    【解决方案1】:

    您可以查看我根据您的代码创建的这个小提琴。可以帮助你 http://jsfiddle.net/GSeZ9/

    var prices  =   [{"brand":"Airtel (Waridtel) Ug","numbering":"25670","price":"40"},
                     {"brand":"UTL ug","numbering":"25671","price":"30"},
                     {"brand":"Airtel Ug","numbering":"25675","price":"40"},
                     {"brand":"MTN Ug","numbering":"25677","price":"20"},
                     {"brand":"MTN Ug","numbering":"25678","price":"20"},
                     {"brand":"Orange Ug","numbering":"25679","price":"30"},
                     {"brand":"Safaricom Ke","numbering":"25470","price":"30"},
                     {"brand":"Safaricom Ke","numbering":"25471","price":"30"}];
    
    var cdest = '245772306640,256754306640,25471624525,2567825689754,2563989654285,4588623566, 256782658974';
    
    var dest =  cdest.split(",");
    
    // loop through brands and numbers. 
    //plan is to create create array like (brand1 =>countbrand1,brand2=>countbrand3, etc)
    
    var cd = {};
    for( var i=0; i<dest.length; i++ )
    {
        $.each(prices, function(index, m) {
           // if(dest[i].toString().indexOf(m.numbering.toString()) != -1 )
                //alert(dest[i].indexOf(m.numbering));
            if(dest[i].toString().indexOf(m.numbering.toString()) == 0)
            {
                if( cd[m.brand] == undefined)
                       cd[m.brand] = 1;
                else
                    cd[m.brand]+=1; 
            } //else
                //cd[International]+=1;
            });
    }
    for (var key in cd) {
       alert(key + " = " + cd[key]);
    }
    

    【讨论】:

    • 我现在唯一遇到的问题是使用 cd [m.brand]+=1 没有增加品牌价值
    • 不,它工作正常,是空间问题,所以我修剪了一下,一切都很好
    【解决方案2】:

    在 php 中,数组有很多用途,但在 javascript 中,数组没有键。对象可以。 prices 变量中的内容是一个对象数组。要循环一个对象,您可以使用以下语法:

    for (var key in p) {
      // do something
      // the key has the name `key` and to get the value, you
      // can type p[key]
    }
    

    这是你的内循环。你得到了正确的外循环。这就是您将循环名称为 dest 的数组的方式:

    for( var i=0; i<dest.length; i++ ) {
         var member = dest[i];
         // do something with member
    }
    

    通过外部循环,我们将获取数组中的每个对象并将其分配给名称为member 的变量。 (当然,你可能会想一个更好的名字) 所以你的最终代码必须看起来像这样:

    for( var i=0; i<dest.length; i++ ) {
        var memeber = dest[i];
        for (var key in member) {
           // do something with the keys and values - print them for example.
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      • 2015-10-27
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多