2012-04-04 26 views

Respuesta

3

Here's a sample con el encadenamiento

//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

¿Cómo es la función reutilizable con múltiples de esta manera? – S16

+0

los datos están envueltos en el objeto. se agregó una función para recuperar y eliminar datos específicos. el encadenamiento funciona cuando la llamada de función anterior devuelve el mismo objeto en el que estaba operando. esto hace posible que la próxima llamada a función lo use, sus métodos y sus datos. básicamente, así es como jQuery también funciona. simplemente recoge elementos en una matriz, luego los envuelve en un objeto y los aumenta con funciones jQuery, que devuelven ese objeto después de cada operación. – Joseph

+0

¿Qué sucede si quiero usar esta función en varios conjuntos de datos en la misma página? – S16

6
+9

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

+1

w3schools es el primero en google;) – galchen

+0

@Jordan: No veo ninguna ventaja en su comentario. Cuando desee apuntar a un recurso calificado, hágalo, y el recurso no sería MDN, sería ECMAScript: http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262 .pdf –