Vue.js Фильтрация вычисляемых свойств - PullRequest
0 голосов
/ 18 марта 2019

У меня есть вычисляемое свойство Vue.js следующим образом.

odds() {
    let race = this.data.events.runners.filter(item => item.course === this.course && item.time === this.time)
    let runner = race[0].data.filter(item => item.name === this.runner)
    return runner[0].odds
}

Хотя он возвращает ожидаемое значение, я думаю, что он выглядит грязным.Может ли кто-нибудь предложить лучший способ написания этого кода.

Пример JSON выглядит следующим образом.

{
    "courses": [{
        "type": "horses",
        "course": "Exeter"
    }],
    "runners": [{
        "course": "Exeter",
        "time": "14:10",
        "data": [{
            "number": "1",
            "name": "White Lilac",
            "odds": "6\/1"
        }, {
            "number": "2",
            "name": "Sauvignon",
            "odds": "5\/1"
        }, {
            "number": "3",
            "name": "Foxy Lass",
            "odds": "33\/1"
        }, {
            "number": "4",
            "name": "Hot Ryan",
            "odds": "8\/1"
        }, {
            "number": "5",
            "name": "Arqalina",
            "odds": "11\/8"
        }, {
            "number": "6",
            "name": "Presenting Lucina",
            "odds": "14\/1"
        }, {
            "number": "7",
            "name": "Persistantprincess",
            "odds": "12\/1"
        }, {
            "number": "8",
            "name": "Windy Bottom",
            "odds": "20\/1"
        }, {
            "number": "9",
            "name": "Shotgun Sally",
            "odds": "33\/1"
        }, {
            "number": "10",
            "name": "Rule The Ocean",
            "odds": "9\/1"
        }, {
            "number": "11",
            "name": "Avithos",
            "odds": "12\/1"
        }, {
            "number": "12",
            "name": "Monet Moor",
            "odds": "16\/1"
        }]
    }]
}

Я хотел бы знать, есть ли гораздо лучший способ сделать это.Заранее спасибо.

1 Ответ

0 голосов
/ 18 марта 2019

Ваш существующий код достаточно хорош.но одно изменение - это ваш курс и время, делающие его уникальными полями, поэтому всегда будет только один индекс, поэтому лучше выходить раньше.(вы можете добавить ложную проверку, чтобы не найти себя).

var requiredCourse = (courseDetails)=>courseDetails.course === this.selectedCourse && courseDetails.time === this.selectedTime;
var requiredhorse = (horse)=> horse.name === this.runner;

var courseIndex = data.findIndex(requiredCourse);
var horseOdds = data[courseIndex].data.findIndex(requiredhorse);
console.log(data[courseIndex].data[horseOdds])

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

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