2017-10-19 75 views
5

我被这个挑战困住了,任何帮助都会很棒。使用数组索引/ Javascript更改字符串的顺序

'创建一个将字符串和数组数组作为参数的函数。重新排列字符串中的字母,使其按索引号指定的顺序排列。返回“混音”字符串。 实例

混音( “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(""); 

}

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

+2

我没有完全得到问题'[0,3,1,2]'它如何将它重新混合到'“acdb”'?你能否给我一点线索。 –

+1

@NanduKalidindi我想我明白了,'0,3,2,1'的意思是“移动”一个“a”到“0”,然后“b”到“3”,“c”到“1” ''和''d''到'2',这给出了预期的''acdb'''(所以数组告诉移动字母的位置,而不是哪个字母需要移动)。 – pawel

+0

完美!现在有意义。谢谢。 –

回答

2

您可以使用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"

0
function myFunction(text, nums){ 
var arr = []; 
for(var num in nums){ 
    arr.push(text.charAt(nums[num]));  
} 
return arr; 

};

我认为这应该工作。

0

编辑答案 - 首先误解了问题。

您可以使用Array.prototype.reducearr填写基于目标位置从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(''); 
+0

我不认为这会返回OP提到的输出结果,请查看Nina Scholz的回答,我自己也没有完全得到混音。 –

+0

@NanduKalidindi感谢您指出,回答编辑。 – pawel