Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中,给定一个输入字符串,创建一个函数,返回一个包含n个2d数组的数组_Javascript_Arrays_Function - Fatal编程技术网

在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变量移到函数外部,这样就不会在每次调用函数时都创建它。