2012-04-04 16 views

Odpowiedz

3

Here's a sample z łańcuchowym

//say you have these arrays 
var test1 = [{ 
    "Country": "Spain", 
    "info info1": 0.329235716, 
    "info info2": 0.447683684, 
    "info info3": 0.447683747}, 
{ 
    "Country": "Chile", 
    "info info1": 1.302673893, 
    "info info2": 1.357820775, 
    "info info3": 1.35626442}, 
{ 
    "Country": "USA", 
    "info info1": 7.78805016, 
    "info info2": 26.59681951, 
    "info info3": 9.200900779}]; 

var test2 = [{ 
    "Country": "Germany", 
    "info info1": 0.329235716, 
    "info info2": 0.447683684, 
    "info info3": 0.447683747}, 
{ 
    "Country": "China", 
    "info info1": 1.302673893, 
    "info info2": 1.357820775, 
    "info info3": 1.35626442}, 
{ 
    "Country": "France", 
    "info info1": 7.78805016, 
    "info info2": 26.59681951, 
    "info info3": 9.200900779}]; 


//similar to jQuery, wrap them in an object 
function $W(param) { 
    var obj = {}; 

    //set data 
    obj.data = param; 

    //augment the object with a remove function 
    obj.remove = function(key, val) { 
     var i = 0; 
     //loop through data 
     while (this.data[i]) { 
      if (this.data[i][key] === val) { 
       //if we have that data, splice it 
       //splice changes the array length so we don't increment 
       this.data.splice(i, 1); 
      } else { 
       //else move on to the next item 
       i++; 
      } 
     } 
     //be sure to return the object so that the chain continues 
     return this; 
    } 

    //return object for operation 
    return obj 
} 

//the following will look strangely similar to jQuery 

//remove chile, then USA 
var result1 = $W(test1).remove('Country', 'Chile').remove('Country', 'USA'); 

//remove germany and china 
var result2 = $W(test2).remove('Country', 'China').remove('Country', 'Germany'); 

//should only have spain and france 
$('#test2').val(JSON.stringify(result1)+JSON.stringify(result2));​ 
+0

W jaki sposób funkcja wielokrotnego użytku może działać w ten sposób? – S16

+0

dane są zawijane w obiekcie. dodano funkcję, aby pobrać i usunąć określone dane. łańcuchowanie działa, gdy poprzednie wywołanie funkcji zwraca ten sam obiekt, na którym działało. umożliwia to następne wywołanie funkcji, aby go użyć, jego metody i dane. w zasadzie tak działa jQuery. po prostu gromadzi elementy w tablicy, a następnie owija je w obiekt i rozszerza o funkcje jQuery, które zwracają ten obiekt po każdej operacji. – Joseph

+0

Co zrobić, jeśli chcę korzystać z tej funkcji w kilku zestawach danych na tej samej stronie? – S16

6
+9

W3Schools, eh? https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice – Jordan

+1

W3Schools jest pierwszym w google;) – galchen

+0

@Jordan: Nie widzę żadnych korzyści w swoim komentarzu. Jeśli chcesz wskazać wykwalifikowany ressource, zrób to, a ressource nie byłoby MDN, byłoby to ECMAScript: http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262 .pdf –