我有一個字串陣列,數量和百分比。
每個鍵都在物件中找到。它的值等于前一個值加上百分比。
這是我寫的代碼:
const keys = ['a', 'b', 'c'];
const amount = 300;
const precentage = 0.5;
const obj = {};
let prevAmount = amount;
for (let i = 0; i < keys.length; i ) {
if (i !== 0) {
obj[keys[i]] = prevAmount prevAmount * precentage;
prevAmount = prevAmount prevAmount * precentage;
} else {
obj[keys[i]] = amount;
prevAmount = amount;
}
}
是obj:
{a: 300, b: 450, c: 675}
我不喜歡這段代碼。對我來說看起來太長了。
有沒有辦法讓它更具可讀性和簡短性?
uj5u.com熱心網友回復:
您可以簡單地跟蹤以前的數量并在每次迭代時更新它。
const keys = ['a', 'b', 'c'];
const amount = 300;
const percentage = 0.5;
const result = {};
let prev = amount;
for (const key of keys) {
result[key] = prev;
prev = prev (prev * percentage);
}
console.log(result)
uj5u.com熱心網友回復:
你可以使用reduce
const createObj = (keys, amount, percentage) => keys.reduce((res, key, i) => {
if (i === 0)
return res
return {
...res,
[key]: res[keys[i - 1]] * (1.0 percentage)
}
}, {
[keys[0]]: amount
})
const keys = ['a', 'b', 'c'];
const amount = 300;
const precentage = 0.5;
const result = createObj(keys, amount, precentage)
console.log(result)
uj5u.com熱心網友回復:
也許reduce與由累積物件和累積數量組成的累加器一起使用?
const keys = ['a', 'b', 'c'];
const amount = 300;
const percentage = 0.5;
const obj = keys.reduce(({obj, amount}, key) => (
obj[key] = amount, {obj, amount: amount * (1 percentage)}
), {obj: {}, amount}).obj;
console.log(obj); //{a: 300, b: 450, c: 675}
uj5u.com熱心網友回復:
這里我沒有使用單獨的變數來存盤 prevAmount。您可以從物件本身抓取它。
首先將初始數量分配給物件,因為它不會改變。
然后從索引 1 而不是索引 0 迭代鍵陣列。
const keys = ["a", "b", "c"];
const amount = 300;
const precentage = 0.5;
const obj = {};
obj[keys[0]] = amount;
for (let i = 1; i < keys.length; i ) {
obj[keys[i]] = obj[keys[i - 1]] * (precentage 1);
}
console.log(obj);
uj5u.com熱心網友回復:
您可以使用Array.prototype.reduce并將keys陣列縮減為所需的物件。
const
keys = ["a", "b", "c"],
amt = 300,
percentage = 0.5,
res = keys.reduce((r, k, i, a) => ((r[k] = i > 0 ? r[a[i - 1]] * (1 percentage) : amt), r), {});
console.log(res);
uj5u.com熱心網友回復:
這可能是另一種解決方案。
const keys = ['a', 'b', 'c'];
const amount = 300;
const percentage = 0.5;
function makeObj(keys, amount, percentage) {
const result = {
[keys[0]]: amount,
};
keys.forEach((k, i, arr) => {
if (i === 0) return;
const prevValue = result[arr[i - 1]];
result[k] = prevValue prevValue * percentage;
});
return result;
}
makeObj(keys, amount, percentage);
uj5u.com熱心網友回復:
其他方式:
const keys = ['a', 'b', 'c'];
const amount = 300;
const precentage = 0.5;
const obj = {};
keys.reduce((prev, current, index) => {
obj[current] = prev (index == 0 ? 0 : amount * precentage)
return (obj[current])
}, amount)
console.log(obj)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/474696.html
標籤:javascript 数组
上一篇:指標可以指向自己嗎?
下一篇:未定義的陣列鍵“影像”
