【问题标题】:Change order of a string using an array indexes/ Javascript使用数组索引/ Javascript 更改字符串的顺序
【发布时间】:2017-10-19 08:12:09
【问题描述】:

我被这个挑战困住了,任何帮助都会很棒。

'创建一个同时接受字符串和数字数组作为参数的函数。按照索引号指定的顺序重新排列字符串中的字母。返回“重新混合”的字符串。 例子

remix("abcd", [0, 3, 1, 2]) ➞ "acdb"'

我的尝试-

function remix(str, arr) {
var arr2 = [];
    for (var i=0; i<str.length; i++){
    arr2.splice(arr[i], 0, str[i]);
}
return arr2.join("");

}

这将解决一些但不是所有的测试。 例如。 ("abcd", [0, 3, 1, 2]) = "acdb" 但有些没有。 例如。 "责任", [0, 6, 8, 11, 10, 7, 13, 5, 3, 2, 4, 12, 1, 9]) 应该是-“rtibliensyopis”我的是“rteislbpoyinsi”

【问题讨论】:

  • 我不太明白[0, 3, 1, 2] 的问题是如何将其重新混合为"acdb" 的?请给我一个线索。
  • @NanduKalidindi 我想我明白了,0,3,2,1 的意思是“将"a" 移动到0,然后将"b" 移动到3"c"1 和@987654333@1到2。这给出了预期的“acdb”(因此数组告诉了将字母移动到哪里,而不是移动哪些字母)。
  • 完美!现在它是有道理的。谢谢。

标签: javascript arrays string


【解决方案1】:

您可以使用arr[i] 的值作为实际字母的目标索引。

function remix(str, arr) {
    var result = [],
        i;

    for (i = 0; i < str.length; i++) {
        result[arr[i]] = str[i];
    }

    return result.join('');
}

console.log(remix("abcd", [0, 3, 1, 2])); // "acdb"
console.log(remix("responsibility", [0, 6, 8, 11, 10, 7, 13, 5, 3, 2, 4, 12, 1, 9])) // "rtibliensyopis"

【讨论】:

    【解决方案2】:
    function myFunction(text, nums){
    var arr = [];
    for(var num in nums){
        arr.push(text.charAt(nums[num]));       
    }
    return arr;
    

    };

    我认为这应该可行。

    【讨论】:

      【解决方案3】:

      已编辑答案 - 起初误解了问题。

      您可以使用Array.prototype.reduce 根据来自arr 的目标位置用来自str 的字母填充新数组中的位置:

      const remix = ( str, arr ) => (
          arr.reduce( (acc, target, idx) => { 
            acc[target] = str[idx]; return acc; 
          }, [])
        ).join('');
      

      或者将str中的字母数组缩减为一个数组:

      const remix = ( str, arr ) => (
          [...str].reduce( (acc, letter, idx) => { 
            acc[arr[idx]] = letter; return acc; 
          }, [])
        ).join('');
      

      【讨论】:

      • 我认为这不会返回 OP 提到的输出。查看 Nina Scholz 的答案。我自己并不太明白混音到底是什么。
      猜你喜欢
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多