我想在物件陣列中使用 reduce 方法,但似乎沒有找到出路。代碼如下。我不知道如何訪問物件中的 totalDonation 屬性。
const box=document.querySelector(".wholeBox");
let contribution=[
{name:"charles",
totalDonation:1000},
{name:"oliver",
totalDonation:500},
{name:"leo",
totalDonation:300},
];
const totalContribution=contribution.reduce((value,totalValue)=>value totalValue);
box.innerHTML=totalContribution;
.wholeBox{
height:300px;
width:500px;
}
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="style.css">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div class="wholeBox"></div>
<script src="reduce.js"></script>
</body>
</html>
uj5u.com熱心網友回復:
你很親密。我注意到的一件事是您將引數交換為.reduce()回呼。然后accumulator (aka total),current value你把它翻轉了。此外,當前值是該迭代的實際物件,因此您可以像平常一樣訪問 totalDonation 屬性.totalDonation。最后,您只需要該reduce函式的初始值。這是因為.reduce()需要 2 個引數 - 首先它需要一個回呼函式(你有),第二個引數是一個初始值,它將用作回圈第一次迭代的累加器值。因為我們在做求和,所以從 0 開始是有意義的,因此我們將 0 作為初始值傳入以減少。
const box=document.querySelector(".wholeBox");
let contribution=[
{name:"charles",
totalDonation:1000},
{name:"oliver",
totalDonation:500},
{name:"leo",
totalDonation:300},
];
// reduce takes 2 parameters - a callback and an initial value. We provide the callback function
// and 0 as the initial value of the accumulator so we can start from 0 when summing the totals
const totalContribution=contribution.reduce((totalValue, currValue) => {
// currValue will be the actual object ( i.e. {name: "charles", "totalDonation": 1000} )
return totalValue currValue.totalDonation;
}, 0); // <--- Here is where we provide the initial value for `.reduce()`
box.innerHTML=totalContribution;
<div class="wholeBox"></div>
uj5u.com熱心網友回復:
你可以這樣做:
let contribution=[
{name:"charles",
totalDonation:1000},
{name:"oliver",
totalDonation:500},
{name:"leo",
totalDonation:300},
];
const totalDonations = contribution.reduce((sum, curr) => {
return curr.totalDonation sum;
}, 0)
console.log(totalDonations)
在您的嘗試中,您沒有減少要總結的特定引數
uj5u.com熱心網友回復:
reduce有一個累加器作為第一個回呼引數,然后第二個引數是當前迭代中的物件(在這種情況下)。累加器是作為引數傳遞給下一次迭代的變數。
您需要將物件的totalDonation值添加到累加器 ( total)。
并且總是最好定義累加器的初始值,在這種情況下是0.
const box = document.querySelector(".wholeBox");
let contribution=[{name:"charles",totalDonation:1e3},{name:"oliver",totalDonation:500},{name:"leo",totalDonation:300}];
const totalContribution = contribution.reduce((total, current) => {
return total current.totalDonation;
}, 0);
box.innerHTML = totalContribution;
<div class="wholeBox"></div>
uj5u.com熱心網友回復:
試試這個:您需要訪問當前值屬性,即 totalDonation。
let contribution=[
{name:"charles",
totalDonation:1000},
{name:"oliver",
totalDonation:500},
{name:"leo",
totalDonation:300},
];
const totalContribution=contribution.reduce((value,curValue)=>value curValue.totalDonation,0);
console.log(totalContribution);
供reduce函式參考:
uj5u.com熱心網友回復:
只需替換該行:
const totalContribution=contribution.reduce((value,totalValue)=>value totalValue);
隨著線:
const totalContribution = contribution.reduce((totalValue,value)=> value.totalDonation totalValue, 0);
就這樣!....見下面的演示
顯示代碼片段
const box=document.querySelector(".wholeBox");
let contribution=[
{name:"charles",
totalDonation:1000},
{name:"oliver",
totalDonation:500},
{name:"leo",
totalDonation:300},
];
const totalContribution=contribution.reduce((totalValue,value)=> value.totalDonation totalValue,0);
box.innerHTML=totalContribution;
.wholeBox{
height:300px;
width:500px;
}
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="style.css">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div class="wholeBox"></div>
<script src="reduce.js"></script>
</body>
</html>
uj5u.com熱心網友回復:
如果由于某種原因您不想為 reduce 函式設定初始值,則需要確保陣列中的第一項可以用作 reduce 函式的初始值。在這種情況下,您可以將陣列映射到僅包含 totalDonation 值的陣列。例如:
contribution
.map(({ totalDonation }) => totalDonation)
.reduce((total, value) => total value)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/484824.html
標籤:javascript 数组 目的 减少
