Рассчитать внутри карты в es6 - PullRequest
0 голосов
/ 22 января 2019

Мне нужно вычислить сумму для определенного поля внутри карты

 {agent.reviews.map((a, i) => {
       return (
          <p style={{fontSize: 15}} key={a.id}>Knowledge Rating: 
                 {a.local_knowledge_rating}</p>
       )
  })}

Возвращает

Knowledge Rating: 1

Knowledge Rating: 2

Но мне нужно добиться, чтобы получить сумму вместо

 Knowledge Rating: 3

Есть идеи?

       "users": [
        {
          "name": "someee",
           "reviews": [
           {
              "id": 1,

              "local_knowledge_rating": 1,
            },
            {
               "id": 2,

                "local_knowledge_rating": 2,
             }
         ],
         }
        ]

Ответы [ 4 ]

0 голосов
/ 22 января 2019
renderKnowledgeRating() {
  const sum = agent.reviews.reduce(function(a, b) { return a. local_knowledge_rating + b. local_knowledge_rating; }, 0)

  return (
    <p style={{fontSize: 15}}>Knowledge Rating: {sum}</p>
  )
}

{this.renderKnowledgeRating()}

Чтобы улучшить читаемость, извлеките часть другим методом renderKnowledgeRating.и вместо использования map, который не очень помогает в вашей ситуации, обрабатывайте вычисления по-другому и возвращайте один компонент

0 голосов
/ 22 января 2019

вы можете попробовать sumBy с помощью lodash: https://lodash.com/docs/4.17.11#sumBy

0 голосов
/ 22 января 2019

Вы можете сделать что-то вроде ниже

Объявите метод ниже за пределами рендера и передайте ему массив обзоров как параметр

Приведенный ниже подход будет суммировать рейтинг для каждого пользователя

   sumRating = reviews => {
        let total = 0;
          agent.reviews.forEach(a => {
               total+= a.local_knowledge_rating;
          });
     return total;
  }


        <p style={{fontSize: 15}}>Knowledge Rating:   {this.sumRating()}</p>

Есть много других способов реализовать то же самое.Вышеуказанный подход является одним из них

0 голосов
/ 22 января 2019

Как предложено, попробуйте это:

function getSum(total, num) {
 return total + num.local_knowledge_rating;
}

{agent.reviews.map((a, i) => {
   return (
      <p style={{fontSize: 15}} key={a.id}>Knowledge Rating: 
             {a.reduce(getSum)}</p>
   )
})}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...