gpt4 book ai didi

javascript - 循环遍历子文件并获取 Javascript 中内容总和的结果

转载 作者:行者123 更新时间:2023-12-03 01:31:54 26 4
gpt4 key购买 nike

我正在努力获取子文件的总和。下面的代码当前返回 a.txt 及其所有子文件的总和,假设 a.txt 的内容为

1
b.txt

b.txt的内容是

2
c.txt

并且c.txt的内容是

3

我还想获取 b.txt 及其所有子文件的总和、c.txt 及其所有子文件的总和,等等对于所有存在的文件等等。因此输出将是: a.txt 及其子文件的总和为 sumb.txt 及其子文件的总和为 sumc.txt及其子文件的总和为sum,依此类推...

我的代码如下:

const fs = require('fs')
const file = 'a.txt'

let output = (file) => {
let data = fs.readFileSync(file, 'utf8')
.split('\n')
.reduce((array, i) => {
if (i.match(/.txt$/)) {
let intArr = array.concat(output(i))
return intArr
} else if (i.match(/^\d+$/)) {
array.push(parseInt(i, 10));
}
return array;
}, [])

return data
}

console.log(output(file))

const sum = output(file)

console.log(sum.reduce((a, b) => a + b, 0))

此外,欢迎提出任何改进此代码的建议。

最佳答案

这可以被视为一个非常标准的图形搜索。您的代码开始执行此操作,但可以更改一些地方以使其更容易一些。

下面是从特定文件开始并跟踪计数对象的深度优先搜索。该函数像您的文件一样解析文件,将数字添加到 counts 对象中。然后就递归了。当递归展开时,它将结果子项的计数添加到父项中。最后它返回 counts 对象,该对象应该包含所有页面的总数+子页面。为了简单起见,它不会进行任何错误检查,并且不清楚如果两个 child 都引用同一个孙子会发生什么 - 是否应该计算两次?要么它应该很容易调整。

我制作了 fs.readFileSync 的模拟版本,代码将在代码片段中运行并且更容易查看:

// fake fs for readFileSync
let fs = {
files: {
"a.txt": "1\nb.txt",
"b.txt": "2\nc.txt",
"c.txt": "3",
"d.txt": "2\n10\ne.txt\nf.txt",
"e.txt": "1",
"f.txt": "5\n7\ng.txt",
"g.txt": "1\na.txt"
},
readFileSync(file) { return this.files[file]}
}

function dfs(file, counts = {}) {
// parse a sinlge file into object
// {totals: sum_allthenumbers, files:array_of_files}
let data = fs.readFileSync(file, 'utf8').split('\n')
let {total, files} = data.reduce((a, c) => {
if(c.match(/^\d+$/)) a.total += parseInt(c)
else if(c.match(/.txt$/)) a.files.push(c)
return a
},{total: 0, files:[]})

// add the total counts for this file
counts[file] = total
// recurse on children files
for (let f of files) {
if (counts.hasOwnProperty(f)) continue // don't look at files twice if there are cycles
let c = dfs(f, counts)
counts[file] += c[f] // children return the counts object, add childs count to parent
}
// return count object
return counts
}

console.log("original files starting with a.txt")
console.log(dfs('a.txt'))

console.log("more involved graph starts with d.txt")
console.log(dfs('d.txt'))

关于javascript - 循环遍历子文件并获取 Javascript 中内容总和的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51257734/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com