2015-05-13 1 views
1

Я хотел бы использовать локальное хранилище, чтобы сделать этот «случайный» выбор ... случайным, но только на основе остальных объектов в массиве ,«Случайный» объект из массива, который не повторяется до тех пор, пока все не используются - с локальным хранилищем

Итак, если 3 выбирается --- тогда рандомизатор будет считать это в следующем выборе и т. Д., ТОГДА - когда все 4 объекта были использованы, сбросьте и повторите весь процесс. Я еще не использовал локальное хранилище, поэтому я ищу несколько советов по наиболее изящному способу сделать это.

var sceneChoices = [ 
    skylineOne = { 
     skyline: '01', 
     ID: '9YwX81KAqdk' 
    }, 
    skylineTwo = { 
     skyline: '02', 
     ID: 'bqJwMYzsmHU' 
    }, 
    skylineThree = { 
     skyline: '03', 
     ID: 'DwNTvj61VQw' 
    }, 
    skylineFour = { 
     skyline: '04', 
     ID: '2cg-Uc556-Q' 
    } 
]; 

if (typeof(Storage) !== 'undefined') { // local storage style 

    var randomSunset = sceneChoices[Math.floor(Math.random() * sceneChoices.length)]; 

} else { // regular style 

    var randomSunset = sceneChoices[Math.floor(Math.random() * sceneChoices.length)]; 

} 

var sunsetName = randomSunset.skyline; 
var youTubeId = randomSunset.ID; 

(писал, что довольно быстро ... и это было неправильно - как указано ниже)

Я думаю, что я действительно хотел массив, как это ...

var sunsetChoices = [ 
    { 
     ID: '01', 
     videoKey: '9YwX81KAqdk' 
    }, 
    { 
     ID: '02', 
     videoKey: 'bqJwMYzsmHU' 
    }, 
    { 
     ID: '03', 
     videoKey: 'DwNTvj61VQw' 
    }, 
    { 
     ID: '04', 
     videoKey: '2cg-Uc556-Q' 
    } 
]; 
+0

Shuffle, pop first – zerkms

+1

Ваш код сцены не является законным Javascript. Предположительно, вы хотите использовать ':' вместо '='. – jfriend00

+0

И для «sceneChoices» подразумевается объект с ключами, а не с массивом. – jfriend00

ответ

1

Вы можете сохраните оставшиеся ключи выбора в localStorage и каждый раз, когда вы загружаете страницу, вы выбираете случайный элемент из оставшихся вариантов и затем обновляете оставшиеся варианты.

Рабочая демонстрация: http://jsfiddle.net/jfriend00/rr75868q/. Каждый раз, когда вы запускаете jsFiddle, он будет отображать другой элемент sceneChoice, пока он не отобразит их все, затем он начнется снова.

var sceneChoices = { 
    skylineOne: { 
     skyline: '01', 
     ID: '9YwX81KAqdk' 
    }, 
    skylineTwo: { 
     skyline: '02', 
     ID: 'bqJwMYzsmHU' 
    }, 
    skylineThree: { 
     skyline: '03', 
     ID: 'DwNTvj61VQw' 
    }, 
    skylineFour: { 
     skyline: '04', 
     ID: '2cg-Uc556-Q' 
    } 
}; 


// select a random object that has not been used 
var items = localStorage.getItem('remainingKeys'); 
if (items) { 
    try { 
     items = JSON.parse(items); 
    } catch(e) { 
     // no nothing, items will still be falsey 
     // so it will get initialized in the next code block 
    } 
} 
if (!items || !items.length) { 
    // nothing stored, so initialize with all keys 
    items = Object.keys(sceneChoices); 
} 
var index = Math.floor(Math.random() * items.length); 
var randomObj = sceneChoices[items[index]]; 

// now remove the selected item from the items array of keys 
// and then store back to localStorage 
items.splice(index, 1); 
localStorage.setItem('remainingKeys', JSON.stringify(items)); 

Примечание: Я должен был исправить декларацию sceneChoices, который не был законным Javascript так, как вы имели его.

Смежные вопросы