2017-10-16 2 views
1

Avoir un ensemble d'objets stockés dans un tableau. Si je veux comparer un attribut comme le poids, comment le ferais-je de la manière la plus efficace? Disons que je veux que le fruitbasket soit plein quand le poids = 10.Comparaison de propriétés d'objet dans un tableau

var fruitBasket = [] 
function addFruit(fruit, weight) { 
return { 
    fruit: fruit, 
    weight: weight 
} 
} 
fruitBasket.push(addFruit(apple, 2)); 
fruitBasket.push(addFruit(orange, 3)); 
fruitBasket.push(addFruit(watermelon, 5)); 
//etc... 
+0

Utiliser 'Array.prototype.reduce' avec une fonction qui ajoute la Propriétés de weight – Barmar

Répondre

1

Vous auriez besoin de maintenir une somme des poids dans le tableau de fruitbasket quelque part, et avant que vous vous ajoutez devriez vérifier contre le poids supplémentaire de un élément. Pas besoin de trop se soucier du poids individuel d'un objet ajouté en accédant à travers l'objet array ->, laissez plutôt votre fonction le gérer.

var totalWeight = 0, 
    maxWeight = 10; 

function addFruit(fruit, weight) { 
    // Adds items to the fruit basket iff weight does not exceed maxWeight 
    if((totalWeight + weight) <= maxWeight) { 
    totalWeight += weight; 
    return { 
     fruit: fruit, 
     weight: weight 
    } 
    } 
} 
1

Pour l'exemple précis que vous avez donné j'utiliser la méthode Array.reduce comme ci-dessous:

var weight =fruitBasket.reduce(function(a,b){return a.weight + b.weight}) 

qui vous donnerait le poids total. Réduire information (https://www.w3schools.com/jsref/jsref_reduce.asp)

Cependant, la réponse peut dépendre de ce que vous entendez aussi efficace (c.-à-efficace, la meilleure performance, plus lisible, etc.)