2015-12-28 1 views
0

J'ai simple javascript tableau:réseau de filtres en utilisant un second réseau en javascript

var earningarray = [ 
    ["2015-12-29T23:59:59+00:00", 3], 
    ["2015-12-28T23:59:59+00:00", 3] 
]; 

J'ai un autre tableau.

var paddingarray = [ 
    ["2015-12-19T23:59:59+00:00", 0], 
    ["2015-12-20T23:59:59+00:00", 0], 
    ["2015-12-21T23:59:59+00:00", 0], 
    ["2015-12-22T23:59:59+00:00", 0], 
    ["2015-12-23T23:59:59+00:00", 0], 
    ["2015-12-24T23:59:59+00:00", 0], 
    ["2015-12-25T23:59:59+00:00", 0], 
    ["2015-12-26T23:59:59+00:00", 0], 
    ["2015-12-27T23:59:59+00:00", 0], 
    ["2015-12-28T23:59:59+00:00", 0] 
]; 

Ce que je suis en train de réaliser est de retirer de paddingarray les lignes où elles existent dans earningsarray sur la base datestamp (première colonne).

J'ai essayé de le faire avec cette fonction:

newarray = paddingarray.filter(function(val) { 
    return earningarray[0].indexOf(val[0]) == -1; 
}); 

Cependant, il ne filtre pas le tableau correctement et produit exactement le même que le paddingarray d'origine. Des idées?

Répondre

3

Essayez d'utiliser Array.prototype.some()

var earningarray = [ 
 
    ["2015-12-29T23:59:59+00:00", 3], 
 
    ["2015-12-28T23:59:59+00:00", 3] 
 
]; 
 

 
var paddingarray = [ 
 
    ["2015-12-19T23:59:59+00:00", 0], 
 
    ["2015-12-20T23:59:59+00:00", 0], 
 
    ["2015-12-21T23:59:59+00:00", 0], 
 
    ["2015-12-22T23:59:59+00:00", 0], 
 
    ["2015-12-23T23:59:59+00:00", 0], 
 
    ["2015-12-24T23:59:59+00:00", 0], 
 
    ["2015-12-25T23:59:59+00:00", 0], 
 
    ["2015-12-26T23:59:59+00:00", 0], 
 
    ["2015-12-27T23:59:59+00:00", 0], 
 
    ["2015-12-28T23:59:59+00:00", 0] 
 
]; 
 

 
var newarray = paddingarray.filter(function(val) { 
 
    return !earningarray.some(function(v) { 
 
    return v[0] === val[0] 
 
    }) 
 
}); 
 

 
console.log(paddingarray.length, newarray.length)

+0

Cela fonctionne parfaitement! – Cookiejest

1

Votre fonction essaie de trouver des valeurs de paddingarray dans earningarray[0], qui est le premier élément de ce tableau, plutôt que dans le premier élément de chacun des éléments de ce tableau.

Essayez ceci:

paddingarray.filter(function(val) { 
    return earningarray.filter(function(val2) { 
     return val2[0] == val[0] 
    }).length == 0; 
});