2017-10-19 68 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