Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> есть ли такой метод копирования части массива 
V
    Опции темы
macdack
Дата 5.9.2014, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 15.4.2010

Репутация: нет
Всего: нет



есть начальный массив []
в произвольном хаотичном порядке пользователем определяются элементы этого массива и их номера записываются в нанабор  {}

как максимально быстро и просто получить новый массив выбранных элементов с сохранением их порядка относительно друг друга в начальном массиве
PM MAIL   Вверх
Aliance
Дата 5.9.2014, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Опять очень сумбурный вопрос. Что значит "нанабор {}"? Если бы был пример (типа имеем массив [a,b,c,d] - на вход даем массив выбранных индексов [2, 0] - выбран третий и первый элементы - в ответ ожидаем массив [a, c]) - было бы легче.
Если приведенный мною пример корректен (а я ваш вопрос именно так понял) - то чем плох простой перебор в цикле? Демо: http://jsfiddle.net/Aliance/coacv5ze/
PM MAIL WWW ICQ Skype   Вверх
macdack
Дата 5.9.2014, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 15.4.2010

Репутация: нет
Всего: нет



не непонял - зачем ты в конце сортуруешь то

как обеспечивается сохранность поралка следования в оригинальном массиве ?




Это сообщение отредактировал(а) macdack - 5.9.2014, 15:36
PM MAIL   Вверх
ksnk
Дата 5.9.2014, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Вообще-то если сортировать массив choosenKeys в первых строчках функции - то порядок элементов в результате будет таким как надо. Сортировка в конце - не нужна.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
macdack
Дата 5.9.2014, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 15.4.2010

Репутация: нет
Всего: нет



 понял

Это сообщение отредактировал(а) macdack - 5.9.2014, 17:06
PM MAIL   Вверх
ksnk
Дата 5.9.2014, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386





--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
macdack
Дата 5.9.2014, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 15.4.2010

Репутация: нет
Всего: нет



ksnk, согласен с тобой

Код

var origin = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
var choosenKeys = [3, 2, 0];
alert(getChoosenItems(origin, choosenKeys));

function getChoosenItems(origin, choosenKeys) {
    choosenKeys=choosenKeys.sort();
    var result = [];
    for (var i = 0; i < choosenKeys.length; i++) {
        result.push(origin[choosenKeys[i]]);
    }
    return result();
};



- но не работает кот

Это сообщение отредактировал(а) Aliance - 8.9.2014, 08:20
PM MAIL   Вверх
ksnk
Дата 5.9.2014, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Цитата(macdack @  5.9.2014,  16:33 Найти цитируемый пост)
- но не работает кот

А коты вообще работают?  smile

Добавлено @ 17:15
Цитата

return result();

? result - это массив, а не функция исправил в коде.
http://jsfiddle.net/qvvbq3dt/

Это сообщение отредактировал(а) ksnk - 5.9.2014, 17:16


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
macdack
Дата 5.9.2014, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 15.4.2010

Репутация: нет
Всего: нет



коты в принципе могут починять примуса
PM MAIL   Вверх
baldina
Дата 5.9.2014, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



если важен только порядок, можно вообще не сортировать http://jsfiddle.net/9yghkjh9/
PM MAIL   Вверх
macdack
Дата 5.9.2014, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 15.4.2010

Репутация: нет
Всего: нет



ksnk, спасибо - твой кот победивши


baldina, твой кот непонятный и выдает фигню не мяукает и сортировка нужна
PM MAIL   Вверх
baldina
Дата 6.9.2014, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



если важен не только порядок, но и ключи, то и тогда можно обойтись без сортировки, сохраняя сложность O(n)
http://jsfiddle.net/6q4bdb8n/
правда, на пару строчек длиннее, чем с sort

Цитата(macdack @  5.9.2014,  19:13 Найти цитируемый пост)
baldina, твой кот непонятный

ну так разбирайся, для тебя же пишем. что именно непонятно?
PM MAIL   Вверх
macdack
Дата 7.9.2014, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 15.4.2010

Репутация: нет
Всего: нет



baldina,  спасибо

Код

var origin = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
var choosenKeys = [3, 2, 0];
console.log(getChoosenItems(origin, choosenKeys));

function getChoosenItems(origin, choosenKeys) {
  var temp = [];
  for (var i = 0; i < choosenKeys.length; i++) {
    var j=choosenKeys[i];
    temp[j]=origin[j];            //понятно как заполняется массив сохраняя оригинальные положения
  }
    
  var result=[];
  for (var i in temp)
    result.push (temp[i]);  //непонятно зачем в массив result копировтаь массив temp если можно просто выдать temp

  return result;
}

PM MAIL   Вверх
baldina
Дата 7.9.2014, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



Цитата(macdack @  7.9.2014,  08:51 Найти цитируемый пост)
непонятно зачем в массив result копировтаь массив temp если можно просто выдать temp

ну вообще-то в моём первом "непонятном" варианте это и выдавалось сразу.

разница между 
Цитата(baldina @  5.9.2014,  18:56 Найти цитируемый пост)
 http://jsfiddle.net/9yghkjh9/ 

и
Цитата(baldina @  6.9.2014,  21:10 Найти цитируемый пост)
http://jsfiddle.net/6q4bdb8n/

в том, что в последнем варианте ключи идут последовательно, а в первом массив может оказаться разреженным (sparse). если итоговый массив обрабатывать так
Код

for (var i in ar) {
  // do something with ar[i]
}

или так
Код

ar.forEach (function (value, index, array) {
  // do something with value or array[index]
});

то разреженность массива (и даже присутствие любых ключей, не только числовых) проблемой не является, в то время как
Код

for (var i =0; i != ar.length; ++i) {
  // do something with ar[i]
}

предполагает (строго!) наличие последовательных числовых ключей.
с другой стороны, for..in перебирает и унаследованные свойства (из прототипа), что может быть нежелательно
самый удобный вариант forEach (но поддерживается не во всех движках)
PM MAIL   Вверх
Aliance
Дата 8.9.2014, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Проблема в разреженным массивом будет в том, что его свойство length будет указывать на неверное число (максимальный индекс + 1). Кроме того (точно не помню), возможно выделит памяти больше, чем реально требуется.

Цитата(baldina @  7.9.2014,  21:27 Найти цитируемый пост)
с другой стороны, for..in перебирает и унаследованные свойства (из прототипа), что может быть нежелательно

ну это легко контролируется условием if (ar.hasOwnProperty(i)) {}
PM MAIL WWW ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0566 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.