2016-06-23 3 views
0

У меня есть простой массив строк, который выглядит как ниже, и соответствующий новый массив. То, что мне нужно выполнить, - это перетасовать простой массив с помощью простого алгоритма тасования (например, ниже), но мне нужен соответствующий новый массив для перетасовки с тем же самым точным перетасовкой, то есть результатом каждого индекса были бы идентичны. Это может ввести в заблуждение, поэтому посмотрите на приведенный ниже пример, и он должен стать ясным. Возможно ли, что этот тип алгоритма возможен при перетасовке Фишера-Йейта?индексы отслеживания с алгоритмом тасования в javascript

Fiddle: here

До:

var simple_arr = ["701", "702", "703", "704", "705", "706", "707", "708"]; 
var new_arr = ["A1","A2","A3","A4","A5","A6","A7","A8"]; 

После:

var after_simple_arr = ["701", "708", "702", "705", "703", "706", "704", "707"]; 
var after_new_arr = ["A1","A8","A2","A5","A3","A6","A4","A7"]; 

Fisher-Yates алгоритм перетасовать:

function shuffle(array) { 
    var currentIndex = array.length, temporaryValue, randomIndex; 

    // While there remain elements to shuffle... 
    while (0 !== currentIndex) { 

    // Pick a remaining element... 
    randomIndex = Math.floor(Math.random() * currentIndex); 
    currentIndex -= 1; 

    // And swap it with the current element. 
    temporaryValue = array[currentIndex]; 
    array[currentIndex] = array[randomIndex]; 
    array[randomIndex] = temporaryValue; 
    } 
    return array; 
} 

ответ

1

Вы можете перетасовать массив индексов е ен использовать его в качестве индекса для двух массивов, вы заботитесь о:

var ids = []; 
for (var i = 0; i < simple_arr.length; i++) { 
    ids.push(i); 
} 
ids = shuffle(ids); 
var dat1 = []; 
var dat2 = []; 
for (var i = 0; i < ids.length; i++) { 
    dat1.push(simple_arr[ids[i]]); 
    dat2.push(new_arr[ids[i]]); 
} 
console.log("shuffled simple_arr: ", dat1); 
console.log("shuffled new_arr: ", dat2); 
+0

это отличное решение, спасибо! @ZiyaoWei – NodeDeveloper102

0

Просто перемешайте массив индексов indices = [0, 1, 2, ...], а затем использовать его, чтобы получить доступ к к-быть-перемешиваются-бай-зе-же-перестановки массивов с помощью array[indices[i]] ,