2017-10-19 144 views
5

Bu zorlukla karşılaştım, herhangi bir yardım harika olurdu.Dizi dizini/dizini kullanarak dizinin sırasını değiştir

'bir dize ve argümanlar olarak sayılar dizisi hem götüren bir işlev oluşturun. Dizindeki harfleri, dizin numaralarıyla belirtilen sıraya göre yeniden düzenleyin. "Remixed" dizesini döndür. örnekleri

remix ("ABCD", [0, 3, 1, 2]) ➞ "ACDB"'

Benim girişimi -

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

}

Bu, bazı çözecek ama tüm testler değil. EG. ("abcd", [0, 3, 1, 2]) = "acdb", ancak bazıları yok. EG. "sorumluluk", [0, 6, 8, 11, 10, 7, 13, 5, 3, 2, 4, 12, 1, 9]) olmalıdır - "rtibliensyopis" maden "rteislbpoyinsi" bir

+2

Soruyu tam olarak anlamadım. [0, 3, 1, 2] '' acdb 'ye nasıl eklenir? Lütfen bana bir ipucu verebilir misiniz? Ben ', bunu elde düşünüyorum –

+1

@NanduKalidindi 0,3,2,1'' 1 c "' "' 3 ', '' etmek" "o zaman '' 0' için, '" bir "hamle'" b demektir 've' "d" 'için' 2'. Bu beklenen ' "ACDB"' '(böylece dizi harf taşımak için nereye söyler, değil almak için hangi harf). – pawel

+0

Mükemmel! Şimdi anlaşıldı verir. teşekkürler. –

cevap

2

Gerçek harf için arr[i] değerini hedef dizin olarak kullanabilirsiniz.

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; 

};

Ben bu işe gerektiğini düşünüyorum.

0

Düzenlenen yanıt - ilk başta soru yanlış.

Sen arr hedef konumlarına göre str gelen harfler ile yeni bir dizide pozisyonları doldurmak için Array.prototype.reduce kullanabilirsiniz:

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

veya bir diziye str harflerin dizisini azaltmak:

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

Ben. Bu OP sözü çıkışlarını dönecektir düşünüyorum Nina Scholz yanıtını göz atın yoktur. kendimi oldukça tam olarak remix ne alamadım. –

+0

@NanduKalidindi sayesinde Buna dikkat çektiğin için düzenlenebilir cevaplamak. – pawel