Poznakomlus,
:-? function getLetters(len){ return result.splice(0,len); } |
все верно, по сути чтоб не перестраивать индексы всех элементов лучше делать это с конца
так как передние элементы не будут затронуты. думаю, что при больших массивах мой код будет производительнее но в данной задаче рони, красиво укоротил функцию до чистой |
Poznakomlus,
зачем усложнять? когда одной строкой можно заменить три? |
Poznakomlus,
:yes: Цитата:
Цитата:
|
Поправил :dance:
function shuffle(array) { var currentIndex = array.length, temporaryValue, randomIndex; while (0 !== currentIndex) { randomIndex = Math.floor(Math.random() * currentIndex); currentIndex -= 1; temporaryValue = array[currentIndex]; array[currentIndex] = array[randomIndex]; array[randomIndex] = temporaryValue; } return array; } var letters = 'аааааааааабббвввввгггдддддееееееееежжззииииииииййййккккккллллмммммннннннннооооооооооппппппррррррсссссстттттуууфххцччшщъыыььэюяяя***'.split(''); var result = shuffle(letters); function getLetters(len){ return result.splice(result.length - len); } console.log(getLetters(7)); console.log(getLetters(7)); console.log(getLetters(7)); console.log(getLetters(7)); // по правилам не более 4-х игроков // получаем далее буквы console.log(getLetters(1)); console.log(getLetters(1)); |
Poznakomlus,
:) |
тесты
var arrA = [...Array(1000000).keys()]; var arrB = [...Array(1000000).keys()]; var arrC = [...Array(1000000).keys()]; var resA = []; var resB = []; var resC = []; function testSplice(){ return arrA.splice(0, 1); } function testSpliceEnd(){ return arrB.splice(arrB.length - 1); } function testSpliceX(){ var arr = arrC.slice(arrC.length - 1); arrC.length -= 1; return arr; } console.time('splice'); for (var i=0; i < 50000; i++){ resA.push(testSplice()); } console.timeEnd('splice'); console.time('spliceEnd'); for (var i=0; i < 50000; i++){ resB.push(testSpliceEnd()); } console.timeEnd('spliceEnd'); console.time('spliceX'); for (var i=0; i < 50000; i++){ resC.push(testSpliceX()); } console.timeEnd('spliceX'); console.log(arrA.length, arrB.length, arrC.length); |
Poznakomlus,
твой вариант всех быстрее :victory: спасибо за тесты |
тесты не совсем актуальные
var arr = Array(100000).fill(1); var resA = []; var resB = []; var resC = []; function testSplice(){ return arr.splice(0, 1); } function testSpliceEnd(){ return arr.splice(arr.length - 1); } function testSpliceX(){ var tmp = arr.slice(arr.length - 1); arr.length -= 1; return tmp; } console.time('spliceX'); for (var i=0; i < 50000; i++){ resC.push(testSpliceX()); } console.timeEnd('spliceX'); arr = Array(100000).fill(1); console.time('splice'); for (var i=0; i < 50000; i++){ resA.push(testSplice()); } console.timeEnd('splice'); arr = Array(100000).fill(1); console.time('spliceEnd'); for (var i=0; i < 50000; i++){ resB.push(testSpliceEnd()); } console.timeEnd('spliceEnd'); console.log(resA.length, resB.length, resC.length); но они четко показывают, что лучше с конца массив срезать :victory: |
Часовой пояс GMT +3, время: 23:06. |