Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 17.09.2017, 19:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Poznakomlus,

function getLetters(len){
  return result.splice(0,len);
}
Ответить с цитированием
  #12 (permalink)  
Старый 17.09.2017, 20:09
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

все верно, по сути чтоб не перестраивать индексы всех элементов лучше делать это с конца
так как передние элементы не будут затронуты.
думаю, что при больших массивах мой код будет производительнее
но в данной задаче рони, красиво укоротил функцию до чистой

Последний раз редактировалось Vlasenko Fedor, 17.09.2017 в 20:34.
Ответить с цитированием
  #13 (permalink)  
Старый 17.09.2017, 20:31
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Poznakomlus,
зачем усложнять? когда одной строкой можно заменить три?
Ответить с цитированием
  #14 (permalink)  
Старый 17.09.2017, 20:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Poznakomlus,
Сообщение от Poznakomlus
чтоб не перестраивать индексы всех элементов лучше делать это с конца
Сообщение от Poznakomlus
при больших массивах мой код будет производительнее
согласен, но не могли бы вы написать тест, если конечно интересно.
Ответить с цитированием
  #15 (permalink)  
Старый 17.09.2017, 20:46
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Поправил
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));
Ответить с цитированием
  #16 (permalink)  
Старый 17.09.2017, 20:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Poznakomlus,
Ответить с цитированием
  #17 (permalink)  
Старый 17.09.2017, 21:14
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

тесты
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);
Ответить с цитированием
  #18 (permalink)  
Старый 17.09.2017, 22:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Poznakomlus,
твой вариант всех быстрее спасибо за тесты
Ответить с цитированием
  #19 (permalink)  
Старый 17.09.2017, 22:36
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

тесты не совсем актуальные
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);

но они четко показывают, что лучше с конца массив срезать
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Node.js Генератор случайных чисел Сергей74rus Node.JS 4 01.04.2015 14:26
Генератор случайных чисел (помогите с задачкой) GentleGoose Общие вопросы Javascript 2 28.07.2014 12:53
Генератор не повторяющихся случайных чисел, кроме... qwertyuiopoiuytrewq Элементы интерфейса 5 24.01.2013 11:39
Генератор случайных чисел с возможностью ввода диапазона. Как сделать? Sovereign Общие вопросы Javascript 3 10.06.2011 08:34
Генератор случайных чисел. Помогите написать. Teenager Я не знаю javascript 5 05.01.2011 19:15