【问题标题】:How to optimalize for loop to work for everyon? [duplicate]如何优化 for 循环以适用于所有人? [复制]
【发布时间】:2021-10-29 08:09:58
【问题描述】:

我的代码有问题,想知道如何优化代码以适用于对象中的每个新“人”。

customers_data={
    'Ben10': [22, 30, 11, 17, 15, 52, 27, 12],
    'Sameer': [5, 17, 30, 33, 40, 22, 26, 10, 11, 45],
    'Zeeshan': [22, 30, 11, 5, 17, 30, 6, 57] 
    }
var count = 0
for (let e of customers_data.Ben10) { if (e >= 20) count ++}
    if (count >= 5) {console.log("Ben10 has Premium Membership")}
    count = 0
for (let e of customers_data.Sameer) { if (e >= 20) count ++}
    if (count >= 5) {console.log("Sameer has Premium Membership")}
    count = 0
for (let e of customers_data.Zeeshan) { if (e >= 20) count ++}
    if (count >= 5) {console.log("Zeeshan has Premium Membership"); count = 0}
    count = 0

【问题讨论】:

    标签: javascript loops


    【解决方案1】:

    customers_data={
        'Ben10': [22, 30, 11, 17, 15, 52, 27, 12],
        'Sameer': [5, 17, 30, 33, 40, 22, 26, 10, 11, 45],
        'Zeeshan': [22, 30, 11, 5, 17, 30, 6, 57] 
        }
    var count = 0
    for(let prop in customers_data)
    {
      for (let e of customers_data[prop]) { if (e >= 20) count ++}
          if (count >= 5) {console.log(prop + " has Premium Membership")}
          count = 0
    }

    【讨论】:

      【解决方案2】:

      使用两个循环。外部循环name => values,内部循环值

      let customers_data = {
          'Ben10': [22, 30, 11, 17, 15, 52, 27, 12],
          'Sameer': [5, 17, 30, 33, 40, 22, 26, 10, 11, 45],
          'Zeeshan': [22, 30, 11, 5, 17, 30, 6, 57] 
          }
      
      for (let dataKey in customers_data) {
          let count = 0;
      
          for (let value of customers_data[dataKey]) {
              if (value >= 20) {
                  count++;
              }
          }
          
          if (count >= 5) {
              console.log(dataKey + " has Premium Membership");
          }
      }

      【讨论】:

        【解决方案3】:

        您可以通过使用向其中传递数据和要检查的名称的函数来稍微DRY 解决这个问题,然后根据结果返回一条消息。

        const customers_data = {
          Ben10: [22, 30, 11, 17, 15, 52, 27, 12],
          Sameer: [5, 17, 30, 33, 40, 22, 26, 10, 11, 45],
          Zeeshan: [22, 30, 11, 5, 17, 30, 6, 57]
        }
        
        // Accept data and a name
        function hasMembership(data, name) {
        
          // `filter` out the numbers that are greater
          //  or equal to 20
          const greaterThan20 = data[name].filter(entry => {
            return entry >= 20;
          });
        
          // If the length of the filtered array is
          // greater or equal to five, return a positive message
          if (greaterThan20.length >= 5) {
            return `${name} has Premium Membership!`;
          }
        
          // Otherwise return something else
          return `Boo. No membership for ${name}.`;
        
        }
        
        console.log(hasMembership(customers_data, 'Ben10'));
        console.log(hasMembership(customers_data, 'Sameer'));
        console.log(hasMembership(customers_data, 'Zeeshan'));

        其他文档

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-04-15
          • 2011-06-15
          • 1970-01-01
          • 2022-11-03
          • 2020-02-18
          • 2010-11-15
          • 2011-08-30
          • 1970-01-01
          相关资源
          最近更新 更多