在JavaScript中,给定一个输入字符串,创建一个函数,返回一个包含n个2d数组的数组
我正在尝试获取示例代码底部的在JavaScript中,给定一个输入字符串,创建一个函数,返回一个包含n个2d数组的数组,javascript,arrays,function,Javascript,Arrays,Function,我正在尝试获取示例代码底部的console.log输出。当前,我的代码正在返回未定义的。我想知道我做错了哪一部分 我还想知道是否有其他更有效的方法来解决这个问题 function pairElement(str) { return str.split('') .forEach(function(element){ return element.split('').map(function(pair){ if (pair == "G") {return [
console.log
输出。当前,我的代码正在返回未定义的
。我想知道我做错了哪一部分
我还想知道是否有其他更有效的方法来解决这个问题
function pairElement(str) {
return str.split('')
.forEach(function(element){
return element.split('').map(function(pair){
if (pair == "G") {return ["G","C"];}
else if (pair == "C") {return ["C","G"];}
else if (pair == "T") {return ["T","A"];}
else {return ["A","T"];}
});
});
}
console.log(pairElement("ATCG"));
// -> Should be [["A","T"], ["T","A"], ["C","G"], ["G","C"]]
// -> But currently, it is returning undefined
返回的是
str.split(“”).forEach(…)
。forEach迭代器方法不返回任何内容;它只是为拆分数组中的每个项运行
也许你是想
.map(…)
?这将获取回调函数返回的值,并使用它们创建一个新数组。返回的是str.split(“”).forEach(…)
。forEach迭代器方法不返回任何内容;它只是为拆分数组中的每个项运行
也许你是想
.map(…)
?这将获取回调函数返回的值,并用它们创建一个新数组。您不需要执行。拆分两次。下面是一个可能的解决方案:
function pairElement(input){
var pairs = { A: "T", T: "A", C: "G", G: "C" };
return input.split("").map(char => [char, pairs[char]]); // ES6 arrow function
}
console.log(pairElement("ATCG"));
“ATCG”.split(“”)
将字符串转换为数组[“A”、“T”、“C”、“G”]
。然后,通过应用映射函数,我们可以将输出逐字符转换为预定义的对[[“a”,“T”,“T”,“a”],[“C”,“G”],[“G”,“C”]
您不需要进行拆分。下面是一个可能的解决方案:
function pairElement(input){
var pairs = { A: "T", T: "A", C: "G", G: "C" };
return input.split("").map(char => [char, pairs[char]]); // ES6 arrow function
}
console.log(pairElement("ATCG"));
“ATCG”.split(“”)
将字符串转换为数组[“A”、“T”、“C”、“G”]
。然后,通过应用映射函数,我们可以将输出逐字符转换为预定义的对[[“a”,“T”,“T”,“a”],[“C”,“G”],[“G”,“C”]
您拆分的次数太多,不需要foreach。拆分从字符串创建一个数组(即[“A”、“T”、“C”、“G”]
)。然后,映射创建一个新数组,每个元素根据您的函数进行修改(即“a”
变为[“a”,“T”]
)
你分裂的次数太多了,你不需要用foreach。拆分从字符串创建一个数组(即[“A”、“T”、“C”、“G”]
)。然后,映射创建一个新数组,每个元素根据您的函数进行修改(即“a”
变为[“a”,“T”]
)
使用.map代替.forEach。.forEach()为每个数组元素执行一次回调函数;与map()或reduce()不同,它总是返回未定义且不可链接的值。典型的用例是在链的末端执行副作用。使用.map代替.forEach。.forEach()为每个数组元素执行一次回调函数;与map()或reduce()不同,它总是返回未定义且不可链接的值。典型的用例是在链的末端执行副作用。为什么要将其拆分两次?我认为第一次拆分会将“ATCG”输入到[“ATCG”]。然后,第二次拆分将其分为[[“A”]、[“T”]、[“C”]、[“G”]],创建我需要的两层深度阵列。然后我认为需要根据第一层数组的索引推送或返回。为什么要将其拆分两次?我认为第一次拆分会将“ATCG”输入到[“ATCG”]。然后,第二次拆分将其分为[[“A”]、[“T”]、[“C”]、[“G”]],创建我需要的两层深度阵列。然后,我认为需要根据第1层数组的索引推送或返回。接受这一正确答案,因为它演示了如何使用键/值对而不是if/else语句。谢谢正因为如此,我学到了一种新技术。简单的优化:因为它可能是静态的,所以将pairs var移到函数外部,这样就不会每次调用函数时都创建它。接受这一点作为正确答案,因为它演示了如何使用键/值对而不是if/else语句。谢谢正因为如此,我学习了一种新技术。简单的优化:因为它可能是静态的,所以将pairs变量移到函数外部,这样就不会在每次调用函数时都创建它。