|
|
|||||
удаление дублей из массива
вот нашёл хороший вариант удаление дублей:
var arr:Array = new Array(); arr.push("one"); arr.push("tru"); arr.push("fri"); arr.push("one"); arr.push("tru"); arr.push("fri"); removeDuplicate(arr); function removeDuplicate(arr:Array):void { var i:int; var j:int; for (i = 0; i < arr.length - 1; i++) { for (j = i + 1; j < arr.length; j++) { if (arr[i]===arr[j]) { arr.splice(j, 1); } } } } trace(arr) var arr:Array = new Array(); arr.push({name:"one", manager:false}); arr.push({name:"tru", manager:true}); arr.push({name:"fri", manager:false}); arr.push({name:"one", manager:false}); arr.push({name:"tru", manager:true}); arr.push({name:"fri", manager:false}); removeDuplicate(arr); function removeDuplicate(arr:Array):void { var i:int; var j:int; for (i = 0; i < arr.length - 1; i++) { for (j = i + 1; j < arr.length; j++) { if (arr[i]===arr[j]) { arr.splice(j, 1); } } } } arr.forEach(traceEmployee); function traceEmployee(element:*, index:int, arr:Array):void { trace(element.name); } |
|
|||||
корявый частный вариант.
Последний раз редактировалось mayakwd; 05.04.2011 в 15:25. |
|
|||||
вот готовое решение мне помог Zebestov
var arr:Array = new Array(); arr.push({name:"one", manager:false}); arr.push({name:"tru", manager:true}); arr.push({name:"fri", manager:false}); arr.push({name:"one", manager:false}); arr.push({name:"tru", manager:true}); arr.push({name:"fri", manager:false}); removeDuplicate(arr); function removeDuplicate(arr:Array):void { var i:int; var j:int; for (i = 0; i < arr.length - 1; i++) { for (j = i + 1; j < arr.length; j++) { if (arr[i].name===arr[j].name) { arr.splice(j, 1); } } } } arr.forEach(traceEmployee); function traceEmployee(element:*, index:int, arr:Array):void { trace(element.name+" - "+ element.manager); } |
|
|||||
Lorem ipsum
|
Ну я там дальше дополнил
Цитата:
ну мы это уже обсудили =)
__________________
Поймай яблоко 2! |
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
А мне так больше нравится
var _member_toString:Function = function():String{ return "{name:" + this.name + ", manager:" + this.manager + "}"; } var arr:Array = []; arr.push({name:"one", manager:false, toString:_member_toString}); arr.push({name:"tru", manager:true, toString:_member_toString}); arr.push({name:"fri", manager:false, toString:_member_toString}); arr.push({name:"one", manager:false, toString:_member_toString}); arr.push({name:"tru", manager:true, toString:_member_toString}); arr.push({name:"fri", manager:false, toString:_member_toString}); trace( "before: \n" + arr.join("\n") ); removeDuplicatesIn( arr ); trace( "after: \n" + arr.join("\n") ); function removeDuplicatesIn( array:Array ):void { if( !array || array.length < 1 ) return; var i:int = array.length; while( i-- > 0 ) { var m:Object = array[i]; var j:int = i; while( j-- > 0 ) { var n:Object = array[j]; if( n.name == m.name && n.manager == m.manager ) { array.splice( i, 1 ); break; } } } } Цитата:
__________________
Загружаем картинки, минуя ошибки безопасности Последний раз редактировалось i.o.; 05.04.2011 в 16:16. |
|
|||||
Lorem ipsum
|
И зачем _member_toString, если ты все равно сравниваешь два поля вручную? )
__________________
Поймай яблоко 2! |
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
В оутпут выводить чтоб без гемора)
В принципе можно было бы и метод сравнения завести.. Смысл тут в другом - массив крутится с конца и нет бесконечных обращений к .length Добавлено через 9 минут Вот вообще универсальный способ, на то пошло раз уж: var _member_isEqual:Function = function( m:Object ):Boolean{ if(!m) return false; return Boolean(this.name == m.name && this.manager == m.manager); } var _member_toString:Function = function():String{ return "{name:" + this.name + ", manager:" + this.manager + "}"; } var arr:Array = []; arr.push({name:"one", manager:false, isEqual:_member_isEqual, toString:_member_toString}); arr.push({name:"tru", manager:true, isEqual:_member_isEqual, toString:_member_toString}); arr.push({name:"fri", manager:false, isEqual:_member_isEqual, toString:_member_toString}); arr.push({name:"one", manager:false, isEqual:_member_isEqual, toString:_member_toString}); arr.push({name:"tru", manager:true, isEqual:_member_isEqual, toString:_member_toString}); arr.push({name:"fri", manager:false, isEqual:_member_isEqual, toString:_member_toString}); trace( "before: \n" + arr.join("\n") ); removeDuplicatesIn( arr ); trace( "after: \n" + arr.join("\n") ); function removeDuplicatesIn( array:Array ):void { if( !array || array.length < 1 ) return; var i:int = array.length; while( i-- > 0 ) { var j:int = i; while( j-- > 0 ) { if( ('isEqual' in array[i] && array[i].isEqual(array[j])) || array[i] == array[j] ) { array.splice( i, 1 ); break; } } } }
__________________
Загружаем картинки, минуя ошибки безопасности Последний раз редактировалось i.o.; 05.04.2011 в 16:37. |
|
|||||
Регистрация: Oct 2010
Адрес: Новосиб
Сообщений: 122
|
есть же стандартный метод filter, он мне кажется более правильный
var arr:Array = new Array(); arr.push({name:"one", manager:false}); arr.push({name:"tru", manager:true}); arr.push({name:"fri", manager:false}); arr.push({name:"one", manager:true}); arr.push({name:"tru", manager:true}); arr.push({name:"fri", manager:true}); trace("Employees:"); arr.forEach(traceEmployee); /* Employees: one tru (manager) fri one (manager) tru (manager) fri (manager) */ var arr2:Array = arr.filter(isManager); trace("Managers:"); arr2.forEach(traceEmployee); /* Managers: one fri one (manager) tru (manager) fri (manager) */ function isManager(element:*, index:int, arr:Array):Boolean { for (var i:uint = index+1; i<arr.length; i++){ if(arr[i]["name"] == element["name"] && arr[i]["manager"] == element["manager"]){ return false; } } return true; } function traceEmployee(element:*, index:int, arr:Array):void { trace("\t" + element.name + ((element.manager) ? " (manager)" : "")); } |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Жду когда кто-нибудь напишет вариант с одним единственным циклом.
|
Часовой пояс GMT +4, время: 05:27. |
|
« Предыдущая тема | Следующая тема » |
Теги |
array , массив , удаление переменной |
Опции темы | |
Опции просмотра | |
|
|