Цикл значений объекта - PullRequest
       6

Цикл значений объекта

0 голосов
/ 21 февраля 2020

Я пытаюсь l oop с оператором if, где оператор if должен пропустить нулевое значение. Но кое-как он не распознает ноль.

У моего значения объекта массива есть это

[ { "id": 17, "match_id": 17, "dktournament_id": 10, "seed_match": 1, "created_at": "2020-02-11 21:37:47", "updated_at": "2020-02-11 21:37:53", "score": { "id": 17, "playerOne": "Knud", "playerTwo": "Weise", "setOne": 3, "setTwo": 0, "created_at": "2020-02-11 21:37:53", "updated_at": "2020-02-11 21:38:21" } }, { "id": 18, "match_id": 18, "dktournament_id": 10, "seed_match": 2, "created_at": "2020-02-11 21:37:47", "updated_at": "2020-02-11 21:39:07", "score": { "id": 18, "playerOne": "Hans", "playerTwo": "Khan", "setOne": 0, "setTwo": 3, "created_at": "2020-02-11 21:39:07", "updated_at": "2020-02-11 21:39:42" } }, { "id": 19, "match_id": 19, "dktournament_id": 10, "seed_match": 3, "created_at": "2020-02-11 21:37:47", "updated_at": "2020-02-11 21:44:12", "score": { "id": 19, "playerOne": "Preben", "playerTwo": "Gertrud", "setOne": 1, "setTwo": 0, "created_at": "2020-02-11 21:44:12", "updated_at": "2020-02-21 12:24:39" } }, { "id": 20, "match_id": 20, "dktournament_id": 10, "seed_match": 4, "created_at": "2020-02-11 21:37:47", "updated_at": "2020-02-11 21:58:02", "score": { "id": 20, "playerOne": "Ingvard", "playerTwo": "Oscar", "setOne": 0, "setTwo": 0, "created_at": "2020-02-11 21:58:02", "updated_at": "2020-02-11 21:58:02" } }, { "id": 21, "match_id": null, "dktournament_id": 10, "seed_match": 5, "created_at": "2020-02-11 21:37:47", "updated_at": "2020-02-11 21:37:47", "score": null }, { "id": 22, "match_id": null, "dktournament_id": 10, "seed_match": 6, "created_at": "2020-02-11 21:37:47", "updated_at": "2020-02-11 21:37:47", "score": null }, { "id": 23, "match_id": null, "dktournament_id": 10, "seed_match": 7, "created_at": "2020-02-11 21:37:47", "updated_at": "2020-02-11 21:37:47", "score": null }, { "id": 24, "match_id": null, "dktournament_id": 10, "seed_match": 8, "created_at": "2020-02-11 21:37:47", "updated_at": "2020-02-11 21:37:47", "score": null } ]

Мой метод такой

totalsetsTeamOne(){
                let i;
                let SetOneTotal = 0;
                for (i = 0; i < 8; i++) {
                    if(this.seedmatches[i]!= null){
                        SetOneTotal += this.seedmatches[i].score.setOne;
                    }
                }
                this.setOneTotal = SetOneTotal;
                console.log(SetOneTotal)
            },

Моя ошибка такая

[Vue warn]: Error in mounted hook: "TypeError: Cannot read property 'setOne' of null"

Ответы [ 5 ]

4 голосов
/ 21 февраля 2020

Ваш оператор if должен быть

 if(this.seedmatches[i] && this.seedmatches[i].score){
      SetOneTotal += this.seedmatches[i].score.setOne;
 }

Поскольку вы проверяете, есть ли значения в this.seedmatches [i]. Но что, если в this.seedmatches [i] есть значения, но this.seedmatches [i] .score равно нулю? Поэтому нам нужно тщательно проверить, является ли this.seedmatches [i] .score также нулевым.

3 голосов
/ 21 февраля 2020

Потому что "id": 21 и другие элементы имеют "score": null

2 голосов
/ 21 февраля 2020

Вы ищете, если this.seedmatches[i], но не, если this.seedmatches[i].score равно нулю

0 голосов
/ 21 февраля 2020

Здесь представлены две версии расчета с использованием выражений.

Во второй используется необязательный оператор .

const data = [ { "id": 17, "match_id": 17, "dktournament_id": 10, "seed_match": 1, "created_at": "2020-02-11 21:37:47", "updated_at": "2020-02-11 21:37:53", "score": { "id": 17, "playerOne": "Knud", "playerTwo": "Weise", "setOne": 3, "setTwo": 0, "created_at": "2020-02-11 21:37:53", "updated_at": "2020-02-11 21:38:21" } }, { "id": 18, "match_id": 18, "dktournament_id": 10, "seed_match": 2, "created_at": "2020-02-11 21:37:47", "updated_at": "2020-02-11 21:39:07", "score": { "id": 18, "playerOne": "Hans", "playerTwo": "Khan", "setOne": 0, "setTwo": 3, "created_at": "2020-02-11 21:39:07", "updated_at": "2020-02-11 21:39:42" } }, { "id": 19, "match_id": 19, "dktournament_id": 10, "seed_match": 3, "created_at": "2020-02-11 21:37:47", "updated_at": "2020-02-11 21:44:12", "score": { "id": 19, "playerOne": "Preben", "playerTwo": "Gertrud", "setOne": 1, "setTwo": 0, "created_at": "2020-02-11 21:44:12", "updated_at": "2020-02-21 12:24:39" } }, { "id": 20, "match_id": 20, "dktournament_id": 10, "seed_match": 4, "created_at": "2020-02-11 21:37:47", "updated_at": "2020-02-11 21:58:02", "score": { "id": 20, "playerOne": "Ingvard", "playerTwo": "Oscar", "setOne": 0, "setTwo": 0, "created_at": "2020-02-11 21:58:02", "updated_at": "2020-02-11 21:58:02" } }, { "id": 21, "match_id": null, "dktournament_id": 10, "seed_match": 5, "created_at": "2020-02-11 21:37:47", "updated_at": "2020-02-11 21:37:47", "score": null }, { "id": 22, "match_id": null, "dktournament_id": 10, "seed_match": 6, "created_at": "2020-02-11 21:37:47", "updated_at": "2020-02-11 21:37:47", "score": null }, { "id": 23, "match_id": null, "dktournament_id": 10, "seed_match": 7, "created_at": "2020-02-11 21:37:47", "updated_at": "2020-02-11 21:37:47", "score": null }, { "id": 24, "match_id": null, "dktournament_id": 10, "seed_match": 8, "created_at": "2020-02-11 21:37:47", "updated_at": "2020-02-11 21:37:47", "score": null } ]

const setOneTotal1 = (arr) => 
    arr.reduce((total, { score }) =>
        ((score && (total += score.setOne)), total), 0)
console.log(setOneTotal1(data))

const setOneTotal2 = (arr) => 
    arr.reduce((total, {score}, _, __, s1 = score?.setOne) => 
        (s1 ? total + s1 : total), 0)
console.log(setOneTotal2(data))
0 голосов
/ 21 февраля 2020

Этот код будет работать .. Попробуйте это ...

totalsetsTeamOne() {
    let i;
    let SetOneTotal = 0;
    for (i = 0; i < 8; i++) {
        if (this.seedmatches[i] && this.seedmatches[i].score !== null) {
            SetOneTotal += seedmatches[i].score.setOne;
        }
    }
    this.setOneTotal = SetOneTotal;
    console.log(SetOneTotal)
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...