Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Удалить и вернуть массив из удаленных элементов splice (https://javascript.ru/forum/misc/38245-udalit-i-vernut-massiv-iz-udalennykh-ehlementov-splice.html)

Paulyyy 24.05.2013 16:47

Удалить и вернуть массив из удаленных элементов splice
 
Тут такой вопрос. Мне нужно удалить повторяющиеся элементы из массива и вывести массив из удаленных элементов в браузер. Получается что-то одно. Параллельно не получается.
Тут функция возвращает удаленные элементы

function Dublicates(array) {
            var dubl = [];

            for (var i = 0; i < array.length; i++) {
                for (var j = i + 1;  j < array.length; j++) {
                    if (array[i][0] == array[j][0]) { // search for the same account numbers

                        dubl = array.splice(j, 1); //массив из удаленных элементов
                      
                    };                   
                };
            };
          
            return dubl; // возвращает массив из удаленных элементов
           
        }


А если пишу так то удаляет элементы из массива

function Dublicates(array) {
            var dubl = [];
      
            for (var i = 0; i < array.length; i++) {
                for (var j = i + 1;  j < array.length; j++) {
                    if (array[i][0] == array[j][0]) { // search for the same account numbers

                        array.splice(j, 1); //удаляет 

                    };                   
                };
            };

            return array; // удаляет
        }

Никак понять не могу как лучше сделать эти два действия в функции. Подскажите пожалуйста:)

Demath 25.05.2013 17:13

А что нужно получить в результате: массив без дублей или массив, состоящий из дублей исходного?

Paulyyy 25.05.2013 18:06

Demath,

Есть массив аrray. Надо найти в колонке (array[i][0]) одинаковые элементы(дубли). Если таковы есть, их надо удалить из массива array(т.е. получить массив без дублей)

И список удаленных вывести в браузер.
т.е. Надо получить массив состоящий из дублей исходного.

Paulyyy 25.05.2013 18:08

Много вариантов было.
Один из них.. функция удаляет из исходного массива дубли. Вторая соответственно уже не может найти дубли.. Т.е. непонятно как его сделать..

Demath 25.05.2013 21:55

Цитата:

Сообщение от Paulyyy
Есть массив аrray. Надо найти в колонке (array[i][0]) одинаковые элементы(дубли). Если таковы есть, их надо удалить из массива array(т.е. получить массив без дублей)

1. Что именно удалить: только сам повторяющийся элемент array[i][0] или всю строку, его содержащую?

2. Могут ли повторяющиеся элементы встречаться более одного раза?

3. В случае, например, array = [[15,2,-5],[1,2,4],[15,0,1],[15,11,5]], что должна вернуть функция?

Paulyyy 26.05.2013 02:44

Вложений: 1
Цитата:

Сообщение от Demath (Сообщение 252748)
1. Что именно удалить: только сам повторяющийся элемент array[i][0] или всю строку, его содержащую?

2. Могут ли повторяющиеся элементы встречаться более одного раза?

3. В случае, например, array = [[15,2,-5],[1,2,4],[15,0,1],[15,11,5]], что должна вернуть функция?

Удалить надо всю строку.

Более одного раза - нет.

Ну а по поводу третьего вопроса то вернет в консоле то что прикрепленном файле

Aetae 26.05.2013 13:08

В первам случае он также удаляет элементы из массива как и во втором, функция возвращает массив удалённых элементов, при этом изначальный array изменяется.

Paulyyy 26.05.2013 15:44

array не меняется в первом случае..

Aetae 26.05.2013 15:52

А я говорю - меняется:
array = [[15,2,-5],[1,2,4],[15,0,1],[15,11,5]]

function Dublicates(array) {
            var dubl = [];
 
            for (var i = 0; i < array.length; i++) {
                for (var j = i + 1;  j < array.length; j++) {
                    if (array[i][0] == array[j][0]) { // search for the same account numbers
 
                        dubl = array.splice(j, 1); //массив из удаленных элементов
                       
                    };                  
                };
            };
           
            return dubl; // возвращает массив из удаленных элементов
            
}
alert(array)
alert( Dublicates(array) )
alert(array)


Читаем про то, как работает splice.

Paulyyy 26.05.2013 17:33

Просто когда я вызываю эту функцию для array то она конечно удаляет. Но когда я хочу вывести удаленные в браузер то вот тут не получается..


Часовой пояс GMT +3, время: 17:52.