Проблема рекурсии, пересекающая глубоко вложенные конструкторы функцииJavascript

Форум по Javascript
Ответить
Anonymous
 Проблема рекурсии, пересекающая глубоко вложенные конструкторы функции

Сообщение Anonymous »

Я уже не смог на моем экзамене для этой задачи: (
Я не могу переиграть все вложенные объекты, чтобы получить только файлы .js. «2.JS», «4.JS», «6.JS», «7.JS», «8.JS»] также должен включать «9.JS».mocha.setup("bdd");
let expect = chai.expect;
let assert = chai.assert;

function findAllJavascriptFiles(folder) {
return new Promise((resolve) => {
let jsFiles = [];
function processFolder(f) {
f.read().then((files) => {
const promises = files.map((file) => {
if (typeof file.read === "function") {
return processFolder(file);
}

if (typeof file === "string" ) {
if(file.endsWith(".js")) {
jsFiles.push(file);
}
}

});

Promise.all(promises).then(() => {
resolve(jsFiles);
});
});
}
processFolder(folder);
});
}

describe("let the test started", () => {
it("flat file system", function (done) {
const tests = [
{
root: new Folder(["1.js", "2.js", "3.js", "4.html"]),
expectedResult: ["1.js", "2.js", "3.js"]
},
{
root: new Folder([
"1.js",
"2.js",
new Folder([new Folder(["3.txt"]), "4.js"]),
new Folder(["5.png", "6.js", new Folder(["7.txt"])]),
"8.html"
]),
expectedResult: ["1.js", "2.js", "4.js", "6.js"]
},
{
root: new Folder([
"1.js",
"2.js",
new Folder([new Folder(["3.txt"]), "4.js"]),
new Folder(["5.png", "6.js", new Folder(["7.txt"])]),
new Folder([
"5.png",
"7.js",
new Folder([
"7.txt",
new Folder(["5.png", "8.js", new Folder(["7.txt", "9.js"])])
])
]),
"8.html"
]),
expectedResult: ["1.js", "2.js", "4.js", "6.js", "7.js", "8.js", "9.js"]
},
{
root: new Folder([
"1.js",
"2.js",
new Folder([new Folder(["3.txt"]), "4.js"]),
new Folder(["5.png", "6.js", new Folder(["7.txt"])]),
new Folder([
"5.png",
"7.js",
new Folder([
"7.txt",
new Folder([
"5.png",
"8.js",
new Folder([
"7.txt",
"9.js",
new Folder([
"11.js",
"12.js",
new Folder([new Folder(["3.txt"]), "14.js"]),
new Folder(["5.png", "16.js", new Folder(["7.txt"])]),
new Folder([
"5.png",
"17.js",
new Folder([
"7.txt",
new Folder([
"5.png",
"18.js",
new Folder(["7.txt", "19.js"])
])
])
]),
"8.html",
new Folder([
"21.js",
"22.js",
new Folder([new Folder(["3.txt"]), "24.js"]),
new Folder(["5.png", "26.js", new Folder(["7.txt"])]),
new Folder([
"5.png",
"27.js",
new Folder([
"7.txt",
new Folder([
"5.png",
"28.js",
new Folder(["7.txt", "29.js"])
])
])
]),
"8.html"
])
])
])
])
])
]),
"8.html"
]),
expectedResult: [
"1.js",
"11.js",
"12.js",
"14.js",
"16.js",
"17.js",
"18.js",
"19.js",
"2.js",
"21.js",
"22.js",
"24.js",
"26.js",
"27.js",
"28.js",
"29.js",
"4.js",
"6.js",
"7.js",
"8.js",
"9.js"
]
}
];

const testPromises = tests.map(({ root, expectedResult }) => {
return findAllJavascriptFiles(root).then((actualResult) => {
console.log(`RESULT:`, actualResult);
assert.deepEqual(actualResult.sort(), expectedResult.sort());
});
});

Promise.all(testPromises)
.then(() => {
done();
})
.catch((err) => {
console.log("err", err);
done(err);
});
});
});

function Folder(files) {
return {
size: () => {
return new Promise((res) => {
res(files.length);
});
},
read: () => {
return new Promise((res) => {
res(files);
});
}
};
}

mocha.run();



Подробнее здесь: https://stackoverflow.com/questions/795 ... nstructors
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»