Как вернуть значение из цикла.JS, Vuejs - PullRequest
0 голосов
/ 19 декабря 2018

Извините, я новичок в JS, у меня есть основной вопрос, но я потратил целый день, пытаясь найти ответ в Google, но не смог.

У меня есть массовый финансовый инструмент, разработанный наPHP и мне нужно построить сложный финансовый калькулятор, который показывает все с реактивностью.Мне нужна помощь, чтобы выяснить, как сделать сложные вычисления с множеством операторов if внутри цикла, а затем суммировать выходное значение из каждого объекта в массиве и возвращать общее суммированное значение.Использование Vuejs для этого.

Так что мой cashDividends() должен быть суммой вычисленных значений для каждого объекта в цикле.

Ниже я помещаю фрагмент кода, чтобы понять проблему, с которой я сталкиваюсь,

Пожалуйста, проверьте, если есть минутка.Спасибо!

     new Vue({
    el: "#waterfall",
    data() {
        return {
        info: {
            cash_dividends: true,
            converted_liabilities: true,
        },
        equities: [
            @foreach($preferredEquities as $equity)
            { name: '{{ $equity->name }}', id: {{ $equity->id }} },
            @endforeach
            ]
        }
    },
    computed: {
        remainingExit () {
            return this.form.exit_value - this.form.uncovered_debt - this.form.transaction_fees
        },
        cashDividends() {
    //I supposed should be something like this.     
          this.equities.forEach(function(equity)
          {
            //Here I make a lot of calculations with bunch of if statements using object and DOM input values. for each object 

          }
          // And here I need to return sum of calculated values from each object (equity) in array 
        }
    },

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

Вы можете использовать функцию reduce, о которой вы можете узнать больше здесь :

new Vue({
  el: "#app",
  data: {
    equities: [{
        name: "Serias A",
        price: 20
      },
      {
        name: "Serias B",
        price: 21
      },
    ]
  },
  computed: {
    cashDividends() {
      return this.equities.reduce(this.sum);
    }
  },
  methods: {
    sum(total, num) {

      return total.price + num.price
    }
  }
});
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.2.1/vue.min.js"></script>
<div id="app">
  {{cashDividends}}
</div>
0 голосов
/ 19 декабря 2018

Использование уменьшение функция

new Vue({
el: "#waterfall",
data: {
    equities: [
           {name: "Serias A", price: '20'},
           {name: "Serias B", price: '21'},
        ]
},
computed: {
    cashDividends() {
        var sum = this.equities.reduce(function(acc, equity) {
            return acc + parseInt(equity.price);
        }, 0)
    }
}
});
0 голосов
/ 19 декабря 2018

Вы можете определить переменную сумму и итеративно добавить к ней equity.price следующим образом:

    cashDividends() {
        let sum = 0
        this.equities.forEach(function(equity)) {
            sum+=equity.price
        }

        return sum
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...