HighDots Forums  

Zwei Arrays filtern

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss Zwei Arrays filtern in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Martin Haust
 
Posts: n/a

Default Zwei Arrays filtern - 03-18-2008 , 09:35 AM






Hallo,

ich habe zwei arrays:

ARR1 = new Array(1,2,3,4,5);
ARR2 = new ARRAY(1,3);

Wie kann ich mit javascript einfach aus ARR1 alle Werte löschen, die in
ARR2 enthalten sind?

Als Ergebnis soll ein Array mit den Elementen (2,4,5) herauskommen. In
PHP kann man dies mit der array_diff()-Funktion machen. Gibt es eine
vergleichbare Funktion in javascript?

Gruß
Martin

Reply With Quote
  #2  
Old   
Martin Haust
 
Posts: n/a

Default Re: Zwei Arrays filtern - 03-18-2008 , 09:43 AM






Martin Haust schrieb:
Quote:
Hallo,

ich habe zwei arrays:

ARR1 = new Array(1,2,3,4,5);
ARR2 = new ARRAY(1,3);

Wie kann ich mit javascript einfach aus ARR1 alle Werte löschen, die in
ARR2 enthalten sind?

Als Ergebnis soll ein Array mit den Elementen (2,4,5) herauskommen. In
PHP kann man dies mit der array_diff()-Funktion machen. Gibt es eine
vergleichbare Funktion in javascript?

Gruß
Martin
hat sich erledigt! Unter folgender URL gibt es eine Lösung:

http://kevin.vanzonneveld.net/techbl...ps_array_diff/

Gruß
Martin


Reply With Quote
  #3  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Zwei Arrays filtern - 03-19-2008 , 09:27 PM





Martin Haust wrote/zu Deiner Priorität-Alpha-1-Nachricht von Sternzeit
18.03.2008 15:43:
Quote:
Martin Haust schrieb:
Hallo,

ich habe zwei arrays:

ARR1 = new Array(1,2,3,4,5);
ARR2 = new ARRAY(1,3);

Wie kann ich mit javascript einfach aus ARR1 alle Werte löschen, die in
ARR2 enthalten sind?

Als Ergebnis soll ein Array mit den Elementen (2,4,5) herauskommen. In
PHP kann man dies mit der array_diff()-Funktion machen. Gibt es eine
vergleichbare Funktion in javascript?

Gruß
Martin

hat sich erledigt! Unter folgender URL gibt es eine Lösung:

http://kevin.vanzonneveld.net/techbl...ps_array_diff/
JFTR:

function array_diff (array) {
// http://kevin.vanzonneveld.net
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + improved by: Sanjoy Roy
// * example 1: array_diff(['Kevin', 'van', 'Zonneveld'], ['van',
// 'Zonneveld']);
// * returns 1: ['Kevin']

var arr_dif = [], i = 1, argc = arguments.length, argv = arguments, key,
key_c, found=false, cntr=0;

// loop through 1st array
for ( key in array ){
// loop over other arrays
for (i = 1; i< argc; i++){
// find in the compare array
found = false;
for (key_c in argv[i]) {
if (argv[i][key_c] == array[key]) {
found = true;
break;
}
}

if(!found){
//arr_dif[key] = array[key];
arr_dif[cntr] = array[key];
cntr++;
}
}
}

return arr_dif;
}

Dieser Algorithmus hat eine Worst-Case-Laufzeitkomplexität von O(n^3), und
beachtet nicht die Reihenfolge der Elemente im Array (diese ist für
for-in-Schleifen nicht definiert).

Zum Vergleich eine effizientere Variante mit einer WCRTC von O(n^2), welche
die Reihenfolge der Elemente beachtet. Sie hat den Nachteil, dass für
nicht-primitive Elemente eine Serialisierung erforderlich ist; dies kann für
native Objekte durch Überschreiben der toString()-Methode des entsprechenden
Prototyp-Objekts erreicht werden.

/**
* Returns an array with all elements removed
* that are elements of other arrays.
*
* @param Array a
* Array to be filtered.
* @params Array
* Arrays to compare against.
* @type
* Array
*/
function array_diff(a, arrays)
{
var dict = new Object();
for (var i = 1, len = arguments.length; i < len; i++)
{
var arg = arguments[i];
for (var j = arg.length; j--
{
dict[arg[j]] = true;
}
}

if (typeof a.filter == "function")
{
return a.filter(
function(v, i, a) {
return !dict.hasOwnProperty(v);
});
}
else
{
var _hasOwnProperty = (function() {
if (typeof dict.hasOwnProperty == "function")
{
return function(o, p) {
return o.hasOwnProperty(p);
};
}
else
{
return function(o, p) {
return (typeof o[p] != "undefined"
&& typeof o.constructor.prototype[p] == "undefined");
};
}
})();

var result = new Array();

i = 0;
for (var len = a.length; i < len; i++)
{
var v = a[i];
if (!_hasOwnProperty(dict, v)) result.push(v);
}

return result;
}
}


PointedEars
--
realism: HTML 4.01 Strict
evangelism: XHTML 1.0 Strict
madness: XHTML 1.1 as application/xhtml+xml
-- Bjoern Hoehrmann


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.