我如何携带函数结果备份函数以再次重申函数?



我有一个通过forEach循环传递的Array。然后,每个物品都要经过检查,以确定特定的顺序或字符。如果它为真,则意味着要从字符串中删除字符,那么它应该与新字符串一起循环。(旧字符串减去选中的字符)

我的问题是,所有的函数仍然在本地持有旧的字符串(在字符被删除之前)。如何将新字符串传递到函数中而不重置值"deleteStringData"目前持有?

let dnaArray = ["ACATATAGACATACGT","AAAAAATACATAGTAGTCGGGTAG","ATACATCGGGTAGCGT"];
dnaStrand = "";

//SORT THROUGH EACH ITEM IN ARRAY
dnaArray.forEach((dnaStrand, index) => {
if (findDna(dnaStrand)) {
console.log("Case #" + index + " " + dnaStrand + ": YES");
}
else {
console.log("Case #" + index + " " + dnaStrand + ": NO");
};
});



function findDna(dnaStrand){
if (findHead(dnaStrand)){
if(findBody(dnaStrand)){
console.log("dna");
return true;
}
}
else {
return false;
}
};

function findHead(dnaStrand){
if (findGlobe(dnaStrand)){
if (findEyeSpots(dnaStrand)) {
return true;
}
}
else{
return false;
}
};

function findBody(dnaStrand){
if (findGlobe(dnaStrand) && findLegs(dnaStrand)) {
return true;
}
else {
return false;
}
};

function findGlobe(dnaStrand){
if(findMatch(dnaStrand, /(A+(TAC|CAT)A)/)){
return true;
}else{
console.log("No Globe");
}
};

function findEyeSpots(dnaStrand){
if(findMatch(dnaStrand, /T(CG*T)*AG/)){
return true;
}else{
console.log("No Eyes");
}
};
function findLegs(dnaStrand){
if(findMatch(dnaStrand, /CG*T/)){
return true;
}else{
console.log("No Legs");
}
};

function findMatch (dnaStrand, regex) {
dnaStrand = String(dnaStrand);
let isMatch = dnaStrand.match(regex);
isMatch = String(isMatch[0]);
//console.log(isMatch);
if (isMatch) {
deleteStringData(dnaStrand, isMatch);
return true;
}
else {
return false;
}
};
function deleteStringData (dnaStrand, string) {
dnaStrand = dnaStrand.replace(string, "");
};

对不起,我有点忙,没有时间通读你所有的代码。根据你的问题,我可以给你一些基本的指导。

确保你的函数有参数。如果每次最终结果都不令人满意或者你只是想再重复一次,做一个If语句,如果你要重复它,在里面做yourFunction(endresult)。如果您担心延迟,请考虑将最终结果作为全局变量,并为函数设置setTimeout

如果在循环中声明测试函数,则可以在该作用域中对单个实例执行操作,而无需传递任何引用。

你也可以使用Promises来链接测试。

这可能不是最有效的方法,但它非常可读。

(async () => {
const strands = [
'ACATATAGACATACGT',
'AAAAAATACATAGTAGTCGGGTAG',
'ATACATCGGGTAGCGT'
];
const results = [];
async function analyze(strand, index) {
let result = {
'case' : parseInt(index), strand
};
function findMatch(pattern) {
return new Promise((resolve, reject) => {
let m = strand.match(pattern)[0];
if (m) {
strand = strand.replace(m, ''); 
resolve(true);
} else {
reject();
}
});
}
function findHead() {
return findGlobe().then(findEyes);
}
function findBody() {
return findGlobe().then(findLegs);
}
function findGlobe() {
return findMatch(/(A+(TAC|CAT)A)/);
}
async function findEyes() {
result.eyes = await findMatch(/T(CG*T)*AG/);
}
async function findLegs() {
result.legs = await findMatch(/CG*T/);
}  
function found() {
result.dna = true;
}
function failed() {
result.dna = false;
}
function done() {
results.push(result);
}
await Promise.all([
findHead(),
findBody()
]).then(found)
.catch(failed)
.finally(done);
}
for (let i in strands) {
await analyze(strands[i], i);
}

console.log(results);
})();

最新更新