首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建JavaScript函数,根据一些信息计算价格(示例商店报价)

创建JavaScript函数,根据一些信息计算价格(示例商店报价)
EN

Stack Overflow用户
提问于 2018-11-25 06:36:12
回答 3查看 916关注 0票数 0

我有一个数组[2,5,1]$,它是价格,客户支付2$为第一项,因为没有折扣的第一项,5-2 = 3为第二项,min(1st item, 2nd item) min(2,5) = 2为第三项;但如果下一项的成本低于第二项,例如1是小于2,成本将为零;

代码语言:javascript
复制
so 2+3+0 is output of calculate price.

如果我还有一个输入

代码语言:javascript
复制
[2,5,1,6]
2 + (5-2) + 0 + (6 - min(2,5,1))

我怎么能做到这一点-

我想写这样的东西-

代码语言:javascript
复制
function calculateAmount(prices) {
    // Write your code here
    var totalCostPurchase;
    var cost = [];
    var zero = 0;
    for (var i = 0; i < prices.length; i++) {
        if (i === 0) {
            cost.push(prices[i]);    
        } else if (i === 1) {
            cost.push(prices[i] - cost[i - 1]);
        } else {
            var minCost = Math.min(...prices.slice(0,i));
            console.log(minCost);
            if (minCost > prices[i]) {
                cost.push(zero);
            } else {
                cost.push(prices[i] - minCost);
            }
        } 
    }
    totalCostPurchase = cost.reduce((a, b) => a + b, 0);
    console.log(totalCostPurchase);
    return totalCostPurchase;
}

Please guide.
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-25 07:11:35

为此,可以使用Array.mapArray.reduce

代码语言:javascript
复制
var a = [2,5,1,6]

let res = a.map((d,i) => i != 0 
              ? d - Math.min(...a.slice(0, i+1))
              : d)
           .reduce((x, y) => x + y)
             

console.log(res)

票数 1
EN

Stack Overflow用户

发布于 2018-11-25 06:59:27

在累加器跟踪和记录和根据规则更新的情况下,可以使用reduce

代码语言:javascript
复制
function total(prices) {
  return prices.reduce(([sum, min], p, i) => {
    if (i === 0) return [p, p];
    let newSum = sum;
    if (p >= min) newSum += p - min;
    return [newSum, Math.min(p, min)];
  }, [])[0];
}


console.log(total([2, 5, 1]));
console.log(total([2, 5, 1, 6]));

票数 1
EN

Stack Overflow用户

发布于 2018-11-25 07:10:50

我尝试了答案,这似乎适用于所有的案例,这可能不是最好的解决方案,但这是我的想法。

代码语言:javascript
复制
function calculateAmount(prices) {
    // Write your code here
    var totalCostPurchase;
    var cost = [];
    var zero = 0;
    for (var i = 0; i < prices.length; i++) {
        if (i === 0) {
            cost.push(prices[i]); 
        } else if (i === 1) {
            if ((prices[i] - cost[i - 1]) < 0) { 
                cost.push(zero);
            } else {
                cost.push(prices[i] - cost[i - 1]);
            }
        } else {
            var minCost = Math.min(...prices.slice(0,i));
            if (minCost > prices[i]) {
                cost.push(zero);
            } else {
                if ((prices[i] - minCost) < 0) {
                    cost.push(zero);
                } else {
                    cost.push(prices[i] - minCost);
                }
            }
        } 
    }
    totalCostPurchase = cost.reduce((a, b) => a + b, 0);
    return totalCostPurchase;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53465237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档