代码之家  ›  专栏  ›  技术社区  ›  Andrii Havryliak

如何仅对需要状态的数组对象求和(true)

  •  0
  • Andrii Havryliak  · 技术社区  · 2 年前

    我有一个包含此类数据的数组(实际上有更多数据)

             [ 
               {
                     serviceid: "979cf8e6",
                     amount: 1,
                     price: 11,
                     materialsPrice: 100,
                     enable: true,
                     chenge: true
                },
                {
                     serviceid: "979cf812",
                     amount: 1,
                     price: 15.5,
                     materialsPrice: 0,
                     enable: true,
                     chenge: true
                }
             ]

    我想匹配数组中change=true的所有“price”。现在我使用这个查询。

       double get sumPay {
        double sum = listVariant
            .map((e) => e.price )
            .fold(0, (previousValue, price) => previousValue + price!);
        return sum;
      }

    但这一要求总结了所有要素,它只会给我提供那些状态发生变化的要素:真的。我将感谢你的帮助)

    4 回复  |  直到 2 年前
        1
  •  1
  •   Enkhbayar    2 年前

    试试这个

       double get sumPay {
        var changeList = listVariant.where((e) => e.change == true);
        double sum = changeList
            .fold(0, (previous, next) => previous.price + next.price);
        return sum;
      }
        2
  •  1
  •   yalda mohasseli    2 年前

    通话前 map 函数的使用 where 选择所需内容的功能:

       double get sumPay {
        double sum = listVariant
            .where((e) => e.change == true)
            .map((e) => e.price )
            .fold(0, (previousValue, price) => previousValue + price!);
        return sum;
      }
    
        3
  •  0
  •   Ravindra S. Patil    2 年前

    尝试以下代码:

    void main() {
      List total = [
        {
          'serviceid': "979cf8e6",
          'amount': 1,
          'price': 11,
          'materialsPrice': 100,
          'enable': true,
          'chenge': true
        },
        {
          'serviceid': "979cf812",
          'amount': 1,
          'price': 15.5,
          'materialsPrice': 0,
          'enable': true,
          'chenge': true
        }
      ];
    
      var count = total.map((m) => m["price"]).reduce((a, b) => a + b);
      print(count );
    }
    
        4
  •  0
  •   eamirho3ein    2 年前

    你可以检查一下 chenge true 通过 price 如果不通过 0 ,所以改变这个

    double sum = listVariant
            .map((e) => e.price )
            .fold(0, (previousValue, price) => previousValue + price!);
    

    double sum = listVariant
            .map((e) => e.chenge ? e.price : 0) //<--- add this
            .fold(0, (previousValue, price) => previousValue + price!);
    

    或@pskink提到使用 where ,如下所示:

    double sum = listVariant
            .where((e) => e.chenge)
            .map((e) => e.price)
            .fold(0, (previousValue, price) => previousValue + price!);