【问题标题】:Find the nth character from an array of words in JavaScript从 JavaScript 中的单词数组中查找第 n 个字符
【发布时间】:2015-12-03 17:08:50
【问题描述】:

我想创建一个带有 1 个参数的函数 (nthChar) - 一个包含 n 个单词的数组。

该函数应连接每个单词的第 n 个字母以构造一个新单词,该单词应作为字符串返回。

第 n 个字母应该是数组中第一个单词的第一个,数组中第二个单词的第二个,第三个单词的第三个,依此类推。所以: nthChar(['I','am','Tom']) 应该返回 'Imm'

这是我的尝试: 函数 nthChar(words){

for (var i=0; i<words.length; i++) {
return words[i].charAt(words.indexOf(words[i]))
}
}

这似乎只抓住了第一个单词的第一个字母。在连接之前我将如何处理数组的其他单词?

【问题讨论】:

  • 提示:你的函数在返回之前没有连接任何东西。
  • return 语句终止函数的执行。您应该在循环后使用return 关键字。
  • 每个字母是 words[i].charAt(i) ,还是 words[i][i] 没有?

标签: javascript arrays string-concatenation


【解决方案1】:

只需对您的代码进行少量更改,您就可以做到这一点

function nthChar(arr) {
    var str = '';
    for (var i=0; i<words.length; i++) {
        str = str + words[i][i];
    }
    return str;
}

str - 用于构建结果字符串

words[i] 选择第 i 个单词 ...该语句中的第二个 [i] 选择该单词中的第 i 个字母

例如:"Hello World"[6] 是 W

奖励:适用于 IE8 及更早版本...


而且,只是为了它,void 在 ES6 中的答案

var nthChar = arr => arr.map((i, v) => i[v]).join('');

【讨论】:

    【解决方案2】:

    这可以很简单

    function nthChar(words){
        var s = "";
        for(var i=0;i<words.length;i++){
          s+= words[i].charAt(i);
        }
        return s;
    }
    

    现场示例:http://jsfiddle.net/11yc79jn/

    这与您的原始解决方案最接近,并且仅使用循环控制变量i,当您循环通过words 数组时,该变量已经递增。当然,也可以在整个循环运行后返回。

    【讨论】:

    • 为什么不用i 而不是x, s+= words[i].charAt(i);
    • @Tushar 没有理由,只是现在还早,而且我显然还不够清醒,无法回答问题:)
    【解决方案3】:
    function nthChar(arr){
    
      return arr.map(function(i, v){
          return i[v];
      }).join("");
    
    }
    
    console.log(nthChar(['I','am','Tom']));
    

    所以它返回一个你想要的字符数组,然后加入它。有意义吗?

    您的代码的问题是您没有将任何内容连接到输出。您可以像访问array 一样访问string 的字符。

    Live Fiddle

    您的代码可以是:

    function nthChar(words){
        var str = "";
        for (var i=0; i<words.length; i++) {
           str += words[i].charAt(i);
        }
        return str;
    }
    

    Fiddle

    【讨论】:

    • 发布答案的目的不应该只是提供解决方案。你应该解释为什么他当前的代码不能按预期工作。
    • “有意义吗?” 不是真的 - 你已经将 OPs for 循环更改为完全不同的 map - 一些解释会很好。
    • 你的代码可以是 str += words[i].charAt(words.indexOf(words[i])) ...什么?不,它不能......整个 indexOf 垃圾都是愚蠢的......他的代码可以是str += words[i][i];
    • words.indexOf(words[i]) 与 i 相同 - 直到你在数组中得到一个重复的单词,然后前者给出错误的索引
    • 是的,不需要使用indexOf方法。完全多余。
    【解决方案4】:

    试试这样的

    function nthChar(words){
      var result = "";
      for (var i = 0, ln = words.length; i<ln; i++) 
        result += words[i].charAt(i);
      return result;
    }
    

    【讨论】:

    • 返回每个单词中的最后一个字符,而不是问题所问的内容
    • 所以:nthChar(['I','am','Tom']) 应该返回 'Imm' - 但他问得很清楚
    • 您的函数意外生成了预期的输出。请重新阅读问题。 “第 n 个字母应该是数组中第一个单词的第一个,数组中第二个单词的第二个,第三个单词的第三个,依此类推。”
    • 哦,你是对的,我真的很抱歉。刚刚更新
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    相关资源
    最近更新 更多