【问题标题】:Conditional selecting in function函数中的条件选择
【发布时间】:2019-01-05 12:51:51
【问题描述】:

我有以下带有餐厅订单的对象。

   var obj = {
      orders: [
        null,
        {
          date: "2018-07-09 10:07:18",
          orderVerified : true,
          item: [
            {
              name: "apple juice",
              price: 3.9,
              quantity: 1,
              isDrink: true 
            },
            {
              name: "Hawaii pizza",
              price: 7,
              quantity: 2,
              isDrink: false
            }
          ]
        },
        {
          date: "2018-07-09 10:07:30",
          orderVerified : false,
          item: [
            {
              name: "Warmer Topfenstrudel",
              price: 3.9,
              quantity: 1,
              isDrink: false
            }
          ]
        },
        {
          date: "2018-07-09 15:07:18",
          orderVerified : true,
          item: [
            {
              name: "Coca Cola 2 l",
              price: 12.9,
              quantity: 3,
              isDrink:true
            }
          ]
        },
        {
          date: "2018-06-13 10:07:18",
          orderVerified : true,
          item: [
            {
              name: "Wiener Schnitzel vom Schwein",
              price: 9.9,
              quantity: 2,
              isDrink: false
            }
          ]
        }
      ]
    };

如果 isDrink 的值为 true,我想总结商品的价格 * 商品数量。 我试过使用这个函数,它得到所有项目的总数。但我可以检查 isDrink 是真是假,但我如何总结饮料价格 * 数量?

 fullTotal: function(arr) {
    if (arr!=''){
    return arr.reduce((sum, order) => {
      return sum + order.item.reduce((itemSum, item) => (
        itemSum + (item.price * item.quantity)
      ), 0)
    },0)}
    else {return 0}
  },

请给我一些建议。谢谢!

【问题讨论】:

    标签: javascript arrays json vue.js


    【解决方案1】:

    试试这个

    fullTotal: function(arr) {
        if (arr!=''){
        return arr.reduce((sum, order) => {
          return sum + order.item.reduce((itemSum, item) => (
            itemSum + item.isDrink ? (item.price * item.quantity) : 0
          ), 0)
        },0)}
        else {return 0}
      },
    

    【讨论】:

      【解决方案2】:

      你必须:

      • 根据您的情况从null 值中过滤数组
      • 从非饮料中过滤项目 [property isDrink]

      var obj = {
        orders: [
          null,
          {
            date: "2018-07-09 10:07:18",
            orderVerified: true,
            item: [{
                name: "apple juice",
                price: 3.9,
                quantity: 1,
                isDrink: true
              },
              {
                name: "Hawaii pizza",
                price: 7,
                quantity: 2,
                isDrink: false
              }
            ]
          },
          {
            date: "2018-07-09 10:07:30",
            orderVerified: false,
            item: [{
              name: "Warmer Topfenstrudel",
              price: 3.9,
              quantity: 1,
              isDrink: false
            }]
          },
          {
            date: "2018-07-09 15:07:18",
            orderVerified: true,
            item: [{
              name: "Coca Cola 2 l",
              price: 12.9,
              quantity: 3,
              isDrink: true
            }]
          },
          {
            date: "2018-06-13 10:07:18",
            orderVerified: true,
            item: [{
              name: "Wiener Schnitzel vom Schwein",
              price: 9.9,
              quantity: 2,
              isDrink: false
            }]
          }
        ]
      };
      
      function fullTotal(arr) {
        if (arr != '') {
          return arr.filter(order => order != null).reduce((sum, order) => {
            return sum + order.item.filter(item => item.isDrink).reduce((itemSum, item) => (
              itemSum + (item.price * item.quantity)
            ), 0)
          }, 0)
        } else {
          return 0
        }
      }
      
      console.log(fullTotal(obj.orders));

      【讨论】:

      • 这就是我想要的。谢谢!
      【解决方案3】:

      您可以添加对数组的检查并检查所需的对象和isDrink。然后返回总和

      var obj = { orders: [null, { date: "2018-07-09 10:07:18", orderVerified: true, item: [{ name: "apple juice", price: 3.9, quantity: 1, isDrink: true }, { name: "Hawaii pizza", price: 7, quantity: 2, isDrink: false }] }, { date: "2018-07-09 10:07:30", orderVerified: false, item: [{ name: "Warmer Topfenstrudel", price: 3.9, quantity: 1, isDrink: false }] }, { date: "2018-07-09 15:07:18", orderVerified: true, item: [{ name: "Coca Cola 2 l", price: 12.9, quantity: 3, isDrink: true }] }, { date: "2018-06-13 10:07:18", orderVerified: true, item: [{ name: "Wiener Schnitzel vom Schwein", price: 9.9, quantity: 2, isDrink: false }] }] },
          fullTotal = function (array) {
              return Array.isArray(array)
                  ? array.reduce((sum, o) => o && Array.isArray(o.item)
                      ? o.item.reduce((s, { price, quantity, isDrink }) => s + (isDrink && price * quantity), sum)
                      : sum, 0)
                  : 0;
          };
      
      console.log(fullTotal(obj.orders));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-29
        • 2019-06-30
        • 2021-11-07
        • 2022-06-22
        • 1970-01-01
        • 2015-03-22
        • 1970-01-01
        相关资源
        最近更新 更多