как удалить одинаковые элементы из массива
Файр-баг находит ошибку в строке if a[j]==a[i]{ - обозначена в коде, пишет что missing ( before condition, как избавиться от этой ошибки? Правильна ли логика вычислений?
<html> <script> var a= new Array(23); a[0]=1; a[1]=1; a[2]=2; a[3]=3; a[4]=4; a[5]=4; a[6]=1; a[7]=5; a[8]=1; a[9]=6; a[10]=1; a[11]=1; a[12]=7; a[13]=1; a[14]=1; a[15]=7; a[16]=1; a[17]=1; a[18]=7; a[19]=1; a[20]=1; a[21]=1; a[22]=8; aLength = a.length; a.sort(); for (var i=0; i<=aLength; i++){ for (var j=1; j<=aLength; j++){ if a[j]==a[i]{ /*Вот та строка*/ a.splice(a[i]); } } } alert(a); </script> <html> |
if( a[j]==a[i]){ /*Вот та строка*/
|
dmitriymar, не понял вас
|
Дмитрий_Кирсанов, посмотри синтаксис конструкции if
http://javascript.ru/if |
>missing ( before condition
перевожу: отсутствует ( перед условием Это как-бэ ничего вам не говорит? |
Цитата:
На всякий случай рабочий пример ))) var a= new Array(23); a[0]=1; a[1]=1; a[2]=2; a[3]=3; a[4]=4; a[5]=4; a[6]=1; a[7]=5; a[8]=1; a[9]=6; a[10]=1; a[11]=1; a[12]=7; a[13]=1; a[14]=1; a[15]=7; a[16]=1; a[17]=1; a[18]=7; a[19]=1; a[20]=1; a[21]=1; a[22]=8; a.sort(); for (var i = 0; i < a.length; i++) for (var j = i + 1; j < a.length;) if (a[i] == a[j]) a.splice(j, 1); else j++; alert(a); |
var a = [1,1,2,3,4,4,1,5,1,6,1,1,7,1,1,7,1,1,7,1,1,1,8], i = a.length; a.sort(); while (i--) { if (a[i] == a[i-1]) { a.splice(i, 1); } } |
Цитата:
Но есть, еще способ: var array = [1, 2, 1, 1, 5, 3, 4, 4, 5], i = array.length, result = []; array.sort(); while(i--){ if(result.join('').search(array[i]) == '-1') { result.push(array[i]); } } alert(result); upd: Zeroglif, тоже очень интересное решение! |
monolithed, а теперь думаем, что будет, если будут числа двузначные и далее :)
|
Цитата:
var array = [1, 2, 1, 10, 5, 3, 4, 40, 50], i = array.length, result = []; array.sort(function(a,b) { return b-a; }); while(i--){ if(result.join().search(array[i]+'\\b') == '-1') { result.push(array[i]); } } alert(result); |
все давно продумано: правильная версия 2 на дклабе
Array.prototype.union = function(list, callback) { if ( 'function' != typeof callback ) { callback = function(value1, value2) { return value1 != value2; } } var result = this; var L = result.length; var j; var u; SEARCH_UNIQUE: for (var i = 0; i < list.length; i++) { j = 0; u = true; while ( j < L ) { u = callback(result[j], list[i]); if ( ! u ) { continue SEARCH_UNIQUE; } j++; } result[L] = list[i]; L++; } return result; } var arr1 = [1, 2, 3, 4]; var arr2 = [1, 4, 5, 6]; arr1.union(arr2); alert(arr1); var arr4 = [].union([1, 1, 3, 1, 4, 3, 5]); alert(arr4); |
Цитата:
|
На всякий случай
Цитата:
var array = [1, 2, 1, 10, 5, 3, 4, 40, 50], i = array.length, result = []; array.sort(function(a,b) { *!* return b-a; */!* }); while(i--){ if(result.join().search(array[i]+'\\b') == '-1') { result.push(array[i]); } } alert(result); |
Цитата:
|
with-love-from-siberia,
Ваш пример не делает начальный массив массивом только с уникальными данными, если он изначально содержит неуникальные данные, можно конечно обьеднить с пустым массивом, для получения уникального. Вариант получения массива с уникальными данными из нескольких массивов, при желании полученный результирующий массив можно затем отсортировать дополнительно. Array.prototype.unique = function () { for (var d = arguments.length, a = 0; a < d; a++) for (var c = arguments[a], b = 0; b < c.length; b++) this.push(c[b]); for (a = 0; a < this.length; a++) for (b = a + 1; b < this.length;) if (this[a] === this[b]) this.splice(b, 1); else b++; return this }; var arr1 = [4, 4, 1, 2, 3, 4, 1, 2, 3, 4]; var arr2 = [1, 4, 5, 6]; var arr3 = [7, 6, 5, 4]; arr1.unique(arr2,arr3); alert(arr1);. |
x-yuri,
Моя вина - неудачная фраза. Подразумевается сохранность порядка элементов в массиве. рони, Простите меня, но я не до конца понял Вас. Правильно ли я понял, что Вы имеете в виду код, например, подобный этому? var arr1 = [4, 4, 1, 2, 3, 4, 1, 2, 3, 4]; arr1.unique(); |
x-yuri, я лишь хотел показать альтернативный (без slice'a) и менее громозкий вариант решения, относительно представленного ранее, а вариант Zeroglif'a безусловно могуч :)
|
with-love-from-siberia,
Да))) |
monolithed, а Array.indexOf на что?
UPD Это слегка запоздалое сообщение :) |
Вот еще один вариант:
var a = [1,1,2,3,4,4,1,5,1,6,1,1,7,1,1,7,1,1,7,1,1,1,8,0,9, 9,9,1]; var b = []; a.sort(); console.log(a); var i=0; while (i < a.length) { if (a[i] != a[i+1]) { b.push(a[i]); } i++; } console.log(b); |
Цитата:
|
var arr = [1, 1, 2, 3, 4, 4, 1, 5, 1, 6, 1, 1, 7, 1, 1, 7, 1, 1, 7, 1, 1, 1, 8]; Array.prototype.uniq = function(){ return this.filter(function (elem, pos, arr) { return arr.indexOf(elem) == pos; }); }; alert(arr.uniq()); Каждый по варианту и сложили домик :haha: |
Часовой пояс GMT +3, время: 19:24. |