使用 Javascript 从 .dat 文件创建数组
Create an array from a .dat file using Javascript
我需要使用 Javascript 将此 file.dat 转换为数组以进行练习。
Team P W L D F A Pts
1. Arsenal 38 26 9 3 79 - 36 87
2. Liverpool 38 24 8 6 67 - 30 80
3. Manchester_U 38 24 5 9 87 - 45 77
4. Newcastle 38 21 8 9 74 - 52 71
5. Leeds 38 18 12 8 53 - 37 66
6. Chelsea 38 17 13 8 66 - 38 64
7. West_Ham 38 15 8 15 48 - 57 53
8. Aston_Villa 38 12 14 12 46 - 47 50
9. Tottenham 38 14 8 16 49 - 53 50
10. Blackburn 38 12 10 16 55 - 51 46
11. Southampton 38 12 9 17 46 - 54 45
12. Middlesbrough 38 12 9 17 35 - 47 45
13. Fulham 38 10 14 14 36 - 44 44
14. Charlton 38 10 14 14 38 - 49 44
15. Everton 38 11 10 17 45 - 57 43
16. Bolton 38 9 13 16 44 - 62 40
17. Sunderland 38 10 10 18 29 - 51 40
-------------------------------------------------------
18. Ipswich 38 9 9 20 41 - 64 36
19. Derby 38 8 6 24 33 - 63 30
20. Leicester 38 5 13 20 30 - 64 28
网上冲浪我找到了解析文件和创建数组的代码。我工作了,但现在 但 我遇到了一些问题:因为在最终数组中我有很多不需要的字符,如空格、团队名称前的数字和仅由 ---- 组成的行-
这是 Html 代码和我的 script.js
function fileToArray(str, delimiter = /[#\s,]+/g) {
// slice from start of text to the first \n index
// use split to create an array from string by delimiter
const headers = str.slice(0, str.indexOf("\n")).split(delimiter);
console.log(headers);
const rows = str.slice(str.indexOf("\n") + 1).split(delimiter);
console.log(rows);
// Map the rows
// split values from each row into an array
// use headers.reduce to create an object
// object properties derived from headers:values
// the object passed as an element of the array
const arr = rows.map(function(row) {
const values = row.split(delimiter);
const el = headers.reduce(function(object, header, index) {
object[header] = values[index];
return object;
}, {});
return el;
});
// return the array
return arr;
console.log(arr);
}
const data = fileToArray(text);
var Json = JSON.stringify(data);
console.log(Json);
使用元字符 /[#\s,]+/g 我能够消除一些空格,但现在我不知道如何改进代码。
编辑:结果必须是这样的JSON:
{
"0": {
"Team":"Arsenal",
"P": 38,
"W":26,
"L":9,
"D":3,
"F":79,
"A":36,
"Pts": 87
},
"1": {
"Team":"Liverpool",
"P": 38,
"W":24,
"L":8,
"D":6,
"F":67,
"A":30,
"Pts": 80
},
...
}
也许是这样的
我把线剪掉后就破坏了
如果您想保留数字并使用对象而不是数组
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+/);
return {[number]: {team, p, w, l, d, f, a, pts}}
})]
}
console.log(
fileToArray(text)
)
<script>
const text = ` Team P W L D F A Pts
1. Arsenal 38 26 9 3 79 - 36 87
2. Liverpool 38 24 8 6 67 - 30 80
3. Manchester_U 38 24 5 9 87 - 45 77
4. Newcastle 38 21 8 9 74 - 52 71
5. Leeds 38 18 12 8 53 - 37 66
6. Chelsea 38 17 13 8 66 - 38 64
7. West_Ham 38 15 8 15 48 - 57 53
8. Aston_Villa 38 12 14 12 46 - 47 50
9. Tottenham 38 14 8 16 49 - 53 50
10. Blackburn 38 12 10 16 55 - 51 46
11. Southampton 38 12 9 17 46 - 54 45
12. Middlesbrough 38 12 9 17 35 - 47 45
13. Fulham 38 10 14 14 36 - 44 44
14. Charlton 38 10 14 14 38 - 49 44
15. Everton 38 11 10 17 45 - 57 43
16. Bolton 38 9 13 16 44 - 62 40
17. Sunderland 38 10 10 18 29 - 51 40
-------------------------------------------------------
18. Ipswich 38 9 9 20 41 - 64 36
19. Derby 38 8 6 24 33 - 63 30
20. Leicester 38 5 13 20 30 - 64 28`
</script>
这里是数组版本
function fileToArray(text) {
const lines = text.split(/\n/); // split on \n
const header = lines[0].trim().split(/\s+/); // split on whitespace after trimming
return [header, ...lines.slice(1).map(line => {
// ignore the number and the dash
const [ignore1, team, p, w, l, d, f, ignore2, a, pts] = line.trim().split(/\s+/);
return [team, p, w, l, d, f, a, pts];
})]
}
console.log(
fileToArray(text)
)
<script>
const text = ` Team P W L D F A Pts
1. Arsenal 38 26 9 3 79 - 36 87
2. Liverpool 38 24 8 6 67 - 30 80
3. Manchester_U 38 24 5 9 87 - 45 77
4. Newcastle 38 21 8 9 74 - 52 71
5. Leeds 38 18 12 8 53 - 37 66
6. Chelsea 38 17 13 8 66 - 38 64
7. West_Ham 38 15 8 15 48 - 57 53
8. Aston_Villa 38 12 14 12 46 - 47 50
9. Tottenham 38 14 8 16 49 - 53 50
10. Blackburn 38 12 10 16 55 - 51 46
11. Southampton 38 12 9 17 46 - 54 45
12. Middlesbrough 38 12 9 17 35 - 47 45
13. Fulham 38 10 14 14 36 - 44 44
14. Charlton 38 10 14 14 38 - 49 44
15. Everton 38 11 10 17 45 - 57 43
16. Bolton 38 9 13 16 44 - 62 40
17. Sunderland 38 10 10 18 29 - 51 40
-------------------------------------------------------
18. Ipswich 38 9 9 20 41 - 64 36
19. Derby 38 8 6 24 33 - 63 30
20. Leicester 38 5 13 20 30 - 64 28`
</script>
我需要使用 Javascript 将此 file.dat 转换为数组以进行练习。
Team P W L D F A Pts
1. Arsenal 38 26 9 3 79 - 36 87
2. Liverpool 38 24 8 6 67 - 30 80
3. Manchester_U 38 24 5 9 87 - 45 77
4. Newcastle 38 21 8 9 74 - 52 71
5. Leeds 38 18 12 8 53 - 37 66
6. Chelsea 38 17 13 8 66 - 38 64
7. West_Ham 38 15 8 15 48 - 57 53
8. Aston_Villa 38 12 14 12 46 - 47 50
9. Tottenham 38 14 8 16 49 - 53 50
10. Blackburn 38 12 10 16 55 - 51 46
11. Southampton 38 12 9 17 46 - 54 45
12. Middlesbrough 38 12 9 17 35 - 47 45
13. Fulham 38 10 14 14 36 - 44 44
14. Charlton 38 10 14 14 38 - 49 44
15. Everton 38 11 10 17 45 - 57 43
16. Bolton 38 9 13 16 44 - 62 40
17. Sunderland 38 10 10 18 29 - 51 40
-------------------------------------------------------
18. Ipswich 38 9 9 20 41 - 64 36
19. Derby 38 8 6 24 33 - 63 30
20. Leicester 38 5 13 20 30 - 64 28
网上冲浪我找到了解析文件和创建数组的代码。我工作了,但现在 但 我遇到了一些问题:因为在最终数组中我有很多不需要的字符,如空格、团队名称前的数字和仅由 ---- 组成的行-
这是 Html 代码和我的 script.js
function fileToArray(str, delimiter = /[#\s,]+/g) {
// slice from start of text to the first \n index
// use split to create an array from string by delimiter
const headers = str.slice(0, str.indexOf("\n")).split(delimiter);
console.log(headers);
const rows = str.slice(str.indexOf("\n") + 1).split(delimiter);
console.log(rows);
// Map the rows
// split values from each row into an array
// use headers.reduce to create an object
// object properties derived from headers:values
// the object passed as an element of the array
const arr = rows.map(function(row) {
const values = row.split(delimiter);
const el = headers.reduce(function(object, header, index) {
object[header] = values[index];
return object;
}, {});
return el;
});
// return the array
return arr;
console.log(arr);
}
const data = fileToArray(text);
var Json = JSON.stringify(data);
console.log(Json);
使用元字符 /[#\s,]+/g 我能够消除一些空格,但现在我不知道如何改进代码。
编辑:结果必须是这样的JSON:
{
"0": {
"Team":"Arsenal",
"P": 38,
"W":26,
"L":9,
"D":3,
"F":79,
"A":36,
"Pts": 87
},
"1": {
"Team":"Liverpool",
"P": 38,
"W":24,
"L":8,
"D":6,
"F":67,
"A":30,
"Pts": 80
},
...
}
也许是这样的
我把线剪掉后就破坏了
如果您想保留数字并使用对象而不是数组
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+/);
return {[number]: {team, p, w, l, d, f, a, pts}}
})]
}
console.log(
fileToArray(text)
)
<script>
const text = ` Team P W L D F A Pts
1. Arsenal 38 26 9 3 79 - 36 87
2. Liverpool 38 24 8 6 67 - 30 80
3. Manchester_U 38 24 5 9 87 - 45 77
4. Newcastle 38 21 8 9 74 - 52 71
5. Leeds 38 18 12 8 53 - 37 66
6. Chelsea 38 17 13 8 66 - 38 64
7. West_Ham 38 15 8 15 48 - 57 53
8. Aston_Villa 38 12 14 12 46 - 47 50
9. Tottenham 38 14 8 16 49 - 53 50
10. Blackburn 38 12 10 16 55 - 51 46
11. Southampton 38 12 9 17 46 - 54 45
12. Middlesbrough 38 12 9 17 35 - 47 45
13. Fulham 38 10 14 14 36 - 44 44
14. Charlton 38 10 14 14 38 - 49 44
15. Everton 38 11 10 17 45 - 57 43
16. Bolton 38 9 13 16 44 - 62 40
17. Sunderland 38 10 10 18 29 - 51 40
-------------------------------------------------------
18. Ipswich 38 9 9 20 41 - 64 36
19. Derby 38 8 6 24 33 - 63 30
20. Leicester 38 5 13 20 30 - 64 28`
</script>
这里是数组版本
function fileToArray(text) {
const lines = text.split(/\n/); // split on \n
const header = lines[0].trim().split(/\s+/); // split on whitespace after trimming
return [header, ...lines.slice(1).map(line => {
// ignore the number and the dash
const [ignore1, team, p, w, l, d, f, ignore2, a, pts] = line.trim().split(/\s+/);
return [team, p, w, l, d, f, a, pts];
})]
}
console.log(
fileToArray(text)
)
<script>
const text = ` Team P W L D F A Pts
1. Arsenal 38 26 9 3 79 - 36 87
2. Liverpool 38 24 8 6 67 - 30 80
3. Manchester_U 38 24 5 9 87 - 45 77
4. Newcastle 38 21 8 9 74 - 52 71
5. Leeds 38 18 12 8 53 - 37 66
6. Chelsea 38 17 13 8 66 - 38 64
7. West_Ham 38 15 8 15 48 - 57 53
8. Aston_Villa 38 12 14 12 46 - 47 50
9. Tottenham 38 14 8 16 49 - 53 50
10. Blackburn 38 12 10 16 55 - 51 46
11. Southampton 38 12 9 17 46 - 54 45
12. Middlesbrough 38 12 9 17 35 - 47 45
13. Fulham 38 10 14 14 36 - 44 44
14. Charlton 38 10 14 14 38 - 49 44
15. Everton 38 11 10 17 45 - 57 43
16. Bolton 38 9 13 16 44 - 62 40
17. Sunderland 38 10 10 18 29 - 51 40
-------------------------------------------------------
18. Ipswich 38 9 9 20 41 - 64 36
19. Derby 38 8 6 24 33 - 63 30
20. Leicester 38 5 13 20 30 - 64 28`
</script>