peterS.: werte aus array-objekten entfernen: Array.remove

Beitrag lesen

gruss Rainer

... Zu viele Unbekannte im Spiel, um mir die Materie wenigstens über
"try and error" anzueignen ....

Niederlage.Schluchz.

glaub ich nicht - wenn doch, dann richtet dich die lektuere des folgenden
   funktionstuechtigen und umfassend kommentierten beispiels ja vielleicht
   doch noch auf.

achtung! code:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
  
  <head>  
    <title>prove-of-concept-array-check-in-or-out.html</title>  
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">  
    <meta http-equiv="content-script-type" content="text/javascript">  
    <script type="text/javascript">  

~~~~~~JavaScript
    /*  
      der folgende funktionsblock erweitert das prototype-objekt des zum  
      sprachkern gehoerenden "Array"-konstruktors um die methode "remove".  
  
      allgemeinverstaendlich formuliert bedeutet dies, dass allen hier  
      je erzeugten array-objekten zusaetzlich zu den standardmethoden  
      auch noch die methode "remove" zur verfuegung steht.  
    */  
      Array.prototype.remove = function(obj) {  
        var arr = this, i = 0;  
        while (i<arr.length) {  
          if (arr[i] === obj) {  
            arr = arr.slice(0,i).concat(arr.slice(i+1,arr.length));  
            --i;  
          }  
          ++i;  
        }  
        for (i=0; i<arr.length; ++i) {  
          this[i] = arr[i];  
        }  
        this.length = arr.length;  
      };  
    //Array.prototype.remove = function(obj) {var arr=this,i=0;while(i<arr.length){if(arr[i]===obj){arr=arr.slice(0,i).concat(arr.slice(i+1,arr.length));--i;}++i;}for(i=0;i<arr.length;++i){this[i]=arr[i];}this.length=arr.length;};  
  
    /*  
      der zweite block enthaelt das globale array "checkboxData".  
      dieses array "kennt" die methode "remove".  
  
      die richtigkeit des konzepts laesst sich anhand der arbeitsweise  
      der funktion "checkInOrOut" ueberpruefen.  
      jeder klick auf eine checkbox ruft diese funktion auf. das einzige  
      funktionsargument ist die referenz auf die gerade geklickte checkbox.  
      wurde die checkbox abgehakt, wird der wert dieser box dem globalen  
      array "checkboxData" hinzugefuegt; anderenfalls wird dieser wert  
      wieder aus ebenjenem array entfernt. damit die im array stehenden  
      aktuellen werte auch noch schoen angezeigt werden koennen, wird  
      das array vor seiner ausgabe nocheinmal schnell sortiert.  
    */  
      var checkboxData = []; // new Array(); // konstruktor;  
  
      var checkInOrOut = function (control) {  
        var dataTrace = document.forms["checkboxes"].elements["traceLine"];  
        if (control.checked) {  
          checkboxData.push(control.value); // check value in;  
        } else {  
          checkboxData.remove(control.value); // remove value;  
        }  
        checkboxData.sort();  
        dataTrace.value = ((checkboxData.toSource) ? (checkboxData.toSource()) : (checkboxData.toString()));  
      };  

~~~~~~html
    </script>  
  </head>  
  
  <body>  
    <p>proof-of-concept-array-check-in-or-out.html</p>  
    <form name="checkboxes" action="" method="get">  
      <input type="text" name="traceLine" size="38" disabled><br><br>  
      <label for="checkbox1">  
        <input type="checkbox" name="checkbox1" id="checkbox1" value="checkbox1" onclick="checkInOrOut(this)">  
        value=&quot;checkbox1&quot;  
      </label><br>  
      <label for="checkbox2">  
        <input type="checkbox" name="checkbox2" id="checkbox2" value="checkbox2" onclick="checkInOrOut(this)">  
        value=&quot;checkbox2&quot;  
      </label><br>  
      <label for="checkbox3">  
        <input type="checkbox" name="checkbox3" id="checkbox3" value="checkbox3" onclick="checkInOrOut(this)">  
        value=&quot;checkbox3&quot;  
      </label><br>  
    </form>  
  </body>  
</html>

gute nacht - peterS. - pseliger@gmx.net

--
"Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive." - Douglas Crockford
ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]