我有一个数组[2,5,1]$,它是价格,客户支付2$为第一项,因为没有折扣的第一项,5-2 = 3为第二项,min(1st item, 2nd item) min(2,5) = 2为第三项;但如果下一项的成本低于第二项,例如1是小于2,成本将为零;
so 2+3+0 is output of calculate price.如果我还有一个输入
[2,5,1,6]
2 + (5-2) + 0 + (6 - min(2,5,1))我怎么能做到这一点-
我想写这样的东西-
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.发布于 2018-11-25 07:11:35
为此,可以使用Array.map和Array.reduce。
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)
发布于 2018-11-25 06:59:27
在累加器跟踪和记录和根据规则更新的情况下,可以使用reduce:
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]));
发布于 2018-11-25 07:10:50
我尝试了答案,这似乎适用于所有的案例,这可能不是最好的解决方案,但这是我的想法。
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;
}https://stackoverflow.com/questions/53465237
复制相似问题