第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

計(jì)算累積鏡面反射值

計(jì)算累積鏡面反射值

慕碼人2483693 2023-09-21 14:21:53
假設(shè)我有一個(gè)像這樣的對(duì)象數(shù)組:const data = [  { value: 0.35, name: 'a' },  { value: 0.12, name: 'b' },  { value: 0.05, name: 'c' },  { value: 0.25, name: 'd' },  { value: 0.23, name: 'e' },]總和正好是 1.0。這是我想要得到的結(jié)果:const data = [  { value: 0.35, name: 'a', cumulativeValue: 0.35 },  { value: 0.12, name: 'b', cumulativeValue: 0.47 },  { value: 0.05, name: 'c', cumulativeValue: 0.52 },  { value: 0.25, name: 'd', cumulativeValue: 0.48 },  { value: 0.23, name: 'e', cumulativeValue: 0.23 },]邏輯是累加直到總和超過(guò)50,一旦超過(guò)這個(gè)值就從數(shù)組末尾開(kāi)始計(jì)算累加值。這是我的代碼,它可以工作,但是有沒(méi)有更優(yōu)雅的方法來(lái)做到這一點(diǎn)?const data = [  { value: 0.35, name: 'a' },  { value: 0.12, name: 'b' },  { value: 0.05, name: 'c' },  { value: 0.25, name: 'd' },  { value: 0.23, name: 'e' },]function computeCumulative(data) {    const newData = data.reduce((prevWithCumPercentages, datum, i) => {      const cumulativeParcentage = i === 0 ? 0 : prevWithCumPercentages[i - 1].cumulativePercentageL      const newDatum = {        ...datum,        cumulativePercentageL: datum.value + cumulativeParcentage,      }      prevWithCumPercentages.push(newDatum)      return prevWithCumPercentages    }, [])     const dataReverse = [...data].reverse().reduce((prevWithCumPercentages, datum, i) => {      const cumulativeParcentage = i === 0 ? 0 : prevWithCumPercentages[i - 1].cumulativePercentageR      const newDatum = {        ...datum,        cumulativePercentageR: datum.value + cumulativeParcentage,      }      prevWithCumPercentages.push(newDatum)      return prevWithCumPercentages    }, []) 
查看完整描述

2 回答

?
慕無(wú)忌1623718

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊

不確定是否足夠優(yōu)雅。我不會(huì)為此使用函數(shù)式編程,簡(jiǎn)單的循環(huán)就足夠了。由于邊界條件(當(dāng)條件觸發(fā)時(shí),它應(yīng)應(yīng)用于下一個(gè)值),此分配非常棘手。這意味著要么有一些 if 子句,要么只是反向迭代。


簡(jiǎn)單的java代碼:


double[] values = {0.35, 0.12,0.05,0.25,0.23 };


double cumulative = 0;

for(int i = values.length-1; i >= 0 ; i--) {

? ? cumulative += values[i];

? ? double c = cumulative < 0.5 ?? cumulative? :1 - cumulative + values[i];

? ? System.out.println("c[" + i + "]=" + c );

}

生產(chǎn):


c[4]=0.23

c[3]=0.48

c[2]=0.52

c[1]=0.47

c[0]=0.35

JavaScript 版本是:


const data = [

? ? { value: 0.35, name: 'a' },

? ? { value: 0.12, name: 'b' },

? ? { value: 0.05, name: 'c' },

? ? { value: 0.25, name: 'd' },

? ? { value: 0.23, name: 'e' },

];


for(let i = data.length - 1, cumulated = 0; i >= 0; i--) {

? ? cumulated += data[i].value;


? ? data[i].cumulated = cumulated < 0.5 ? cumulated : 1 - cumulated + data[i].value;

}


console.log(data);


查看完整回答
反對(duì) 回復(fù) 2023-09-21
?
哆啦的時(shí)光機(jī)

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊

您可以對(duì)總和進(jìn)行閉包,并在加/減值的前半部分或后半部分設(shè)置一個(gè)標(biāo)志。


對(duì)于最后一個(gè)對(duì)象,采用原始值以省略浮點(diǎn)運(yùn)算錯(cuò)誤。


const

    data = [{ value: 0.35, name: 'a' }, { value: 0.12, name: 'b' }, { value: 0.05, name: 'c' }, { value: 0.25, name: 'd' }, { value: 0.23, name: 'e' }],

    result = data.map(((cumulativeValue, first) => (o, i, { length }) => {

        if (first) cumulativeValue += o.value;

        const temp = { ...o, cumulativeValue };

        if (!first) cumulativeValue -= o.value;

        if (cumulativeValue > 0.5) {

            first = false;

            cumulativeValue = 1 - cumulativeValue;

        }

        return i + 1 === length

            ? { ...o, cumulativeValue: o.value }

            : temp;

    })(0, true))


console.log(result)

.as-console-wrapper { max-height: 100% !important; top: 0; }


查看完整回答
反對(duì) 回復(fù) 2023-09-21
  • 2 回答
  • 0 關(guān)注
  • 159 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)