Soma de array avançado em AngularJS
Em AngularJS, somar propriedades de array pode ser uma tarefa comum. Uma abordagem básica envolve iterar pela matriz e acumular os valores das propriedades. No entanto, esse método se torna tedioso quando confrontado com vários arrays e nomes de propriedades variados.
Para resolver isso, é desejada uma solução mais flexível e reutilizável, que permita a soma conveniente de qualquer propriedade do array. Isso pode ser conseguido usando o método reduzir(), que fornece uma maneira poderosa de agregar valores de array.
Considere o seguinte exemplo:
$scope.traveler = [ { description: 'Senior', Amount: 50}, { description: 'Senior', Amount: 50}, { description: 'Adult', Amount: 75}, { description: 'Child', Amount: 35}, { description: 'Infant', Amount: 25 }, ];
Para somar a propriedade 'Amount' do array traveler usando reduzir(), podemos escrever um método como segue:
$scope.sum = function(items, prop){ return items.reduce( function(a, b){ return a b[prop]; }, 0); };
Neste método, usamos o método reduz() com uma função de retorno de chamada que aceita dois argumentos: o valor acumulado (a) e o elemento atual (b) do array. Dentro do callback, acessamos a propriedade que queremos somar (prop) e adicionamos ao valor acumulado.
Para aplicar este método ao nosso array traveler, podemos fazer o seguinte:
$scope.travelerTotal = $scope.sum($scope.traveler, 'Amount');
Usando esta abordagem, podemos facilmente somar valores de propriedade de qualquer array em nosso aplicativo AngularJS. Ao definir um método reutilizável, evitamos código redundante e garantimos consistência em nossos cálculos de soma.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3