我正在使用 Javascript 使用 .dat 檔案,其中包含有關英國足球隊的不同資料。我能夠獲得一個我在這個陣列中轉換的 Json:
[{"team":"Arsenal","f":"79","a":"36"},
{"team":"Liverpool","f":"67","a":"30"},
{"team":"Manchester_U","f":"87","a":"45"},
{"team":"Newcastle","f":"74","a":"52"},
{"team":"Leeds","f":"53","a":"37"},
{"team":"Chelsea","f":"66","a":"38"},
{"team":"West_Ham","f":"48","a":"57"},
{"team":"Aston_Villa","f":"46","a":"47"},
{"team":"Tottenham","f":"49","a":"53"},
{"team":"Blackburn","f":"55","a":"51"},
{"team":"Southampton","f":"46","a":"54"},
{"team":"Middlesbrough","f":"35","a":"47"},
{"team":"Fulham","f":"36","a":"44"},
{"team":"Charlton","f":"38","a":"49"},
{"team":"Everton","f":"45","a":"57"},
{"team":"Bolton","f":"44","a":"62"},
{"team":"Sunderland","f":"29","a":"51"},
{"team":"Ipswich","f":"41","a":"64"},
{"team":"Derby","f":"33","a":"63"},
{"team":"Leicester","f":"30","a":"64"}]
該陣列包含不同足球隊的名稱和兩個值:每支球隊的進球數 (F) 和失球數 (A)。我必須決議這個陣列才能進行以下操作:
- 將“a”和“f”之間的差值添加到陣列(對于非常團隊);
- 回傳得分和失球之間差異最小的球隊的名稱。
但我不知道怎么做。
我只到了這一點:
const myFrom = document.getElementById("myForm");
const datFile = document.getElementById("datFile");
function fileToArray(text) {
const lines = text.split(/\n/); // split on \n
const header = lines[0].trim().split(/\s /); // split on whitespace after trimming
return [...lines.slice(1).map(line => {
// ignore the number and the dash
const [number, team, p, w, l, d, f, ignore2, a, pts] = line.trim().split(/\s /);
let values={team, f, a};
return values;
})]
}
myForm.addEventListener("submit", function (e) {
e.preventDefault();
console.log("Form submitted");
const input = datFile.files[0];
const reader = new FileReader();
reader.onload = function (e){
const text= e.target.result;
const data = fileToArray(text);
const arr1 = data.slice(0,17);
const arr2 = data.slice(18,21);
let myArray = arr1.concat(arr2);
let myJSON = JSON.stringify(myArray);
let obj=JSON.parse(myJSON);
}
reader.readAsText(input);
});
<form id="myForm">
<input type="file" id="datFile" accept=".dat" />
<br />
<input type="submit" value="Submit" />
</form>
在這一點上,我停了下來。
uj5u.com熱心網友回復:
認為這兩個操作可以一起完成以進行干凈的寫作,您可以執行以下操作。
map 在名為的新屬性中添加兩個屬性之間的差異 d
用于Math.abs保持差異為正。
let teams = [{"team":"Arsenal","f":"79","a":"36"},
{"team":"Liverpool","f":"67","a":"30"},
{"team":"Manchester_U","f":"87","a":"45"},
{"team":"Newcastle","f":"74","a":"52"},
{"team":"Leeds","f":"53","a":"37"},
{"team":"Chelsea","f":"66","a":"38"},
{"team":"West_Ham","f":"48","a":"57"},
{"team":"Aston_Villa","f":"46","a":"47"},
{"team":"Tottenham","f":"49","a":"53"},
{"team":"Blackburn","f":"55","a":"51"},
{"team":"Southampton","f":"46","a":"54"},
{"team":"Middlesbrough","f":"35","a":"47"},
{"team":"Fulham","f":"36","a":"44"},
{"team":"Charlton","f":"38","a":"49"},
{"team":"Everton","f":"45","a":"57"},
{"team":"Bolton","f":"44","a":"62"},
{"team":"Sunderland","f":"29","a":"51"},
{"team":"Ipswich","f":"41","a":"64"},
{"team":"Derby","f":"33","a":"63"},
{"team":"Leicester","f":"30","a":"64"}];
teams.map((t) => t['d'] = Math.abs(t.f - t.a))
console.log(teams);
為了減少差異最小的團隊,您可以使用以下代碼 reduce
let teams = [{"team":"Arsenal","f":"79","a":"36"},
{"team":"Liverpool","f":"67","a":"30"},
{"team":"Manchester_U","f":"87","a":"45"},
{"team":"Newcastle","f":"74","a":"52"},
{"team":"Leeds","f":"53","a":"37"},
{"team":"Chelsea","f":"66","a":"38"},
{"team":"West_Ham","f":"48","a":"57"},
{"team":"Aston_Villa","f":"46","a":"47"},
{"team":"Tottenham","f":"49","a":"53"},
{"team":"Blackburn","f":"55","a":"51"},
{"team":"Southampton","f":"46","a":"54"},
{"team":"Middlesbrough","f":"35","a":"47"},
{"team":"Fulham","f":"36","a":"44"},
{"team":"Charlton","f":"38","a":"49"},
{"team":"Everton","f":"45","a":"57"},
{"team":"Bolton","f":"44","a":"62"},
{"team":"Sunderland","f":"29","a":"51"},
{"team":"Ipswich","f":"41","a":"64"},
{"team":"Derby","f":"33","a":"63"},
{"team":"Leicester","f":"30","a":"64"}];
teams.map((t) => t['d'] = Math.abs(t.f - t.a))
// now finding the team with the lowsest
let result = teams.reduce((teamA,teamB) => teamA.d > teamB.d? teamB: teamA );
console.log(result);
uj5u.com熱心網友回復:
使用回圈(例如for...of)或陣列方法(例如第 1 部分的映射和第 2 部分的過濾器)都是有效的方法。
我個人更喜歡回圈,因為它更易于閱讀和除錯,并且您可以將兩個步驟組合成一個回圈。就像是:
// use the first element as starter then update in the loop
let leastDiff = Math.abs(myArray[0].f - myArray[0].a);
let bestTeam = myArray[0].team;
for (let item of myArray) {
item.diff = Math.abs(item.f - item.a);
if (item.diff < leastDiff) {
leastDiff = item.diff;
bestTeam = item.team;
}
}
console.log(`Team with least difference is ${bestTeam} with ${leastDiff} goal difference`);
uj5u.com熱心網友回復:
map 和 reduce 的組合可以:
const teams= [{"team":"Arsenal","f":"79","a":"36"}, {"team":"Liverpool","f":"67","a":"30"}, {"team":"Manchester_U","f":"87","a":"45"}, {"team":"Newcastle","f":"74","a":"52"}, {"team":"Leeds","f":"53","a":"37"}, {"team":"Chelsea","f":"66","a":"38"}, {"team":"West_Ham","f":"48","a":"57"}, {"team":"Aston_Villa","f":"46","a":"47"}, {"team":"Tottenham","f":"49","a":"53"}, {"team":"Blackburn","f":"55","a":"51"}, {"team":"Southampton","f":"46","a":"54"}, {"team":"Middlesbrough","f":"35","a":"47"}, {"team":"Fulham","f":"36","a":"44"}, {"team":"Charlton","f":"38","a":"49"}, {"team":"Everton","f":"45","a":"57"}, {"team":"Bolton","f":"44","a":"62"}, {"team":"Sunderland","f":"29","a":"51"}, {"team":"Ipswich","f":"41","a":"64"}, {"team":"Derby","f":"33","a":"63"}, {"team":"Leicester","f":"30","a":"64"}]
let diff=Infinity;
console.log(
teams.map((t)=>(t.d=t.a-t.f, t))
.reduce((a,c)=>Math.abs(c.d)<=diff?(diff=Math.abs(c.d), c.team): a,'')
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/412314.html
標籤:
