Проблема с undefined
вызвана использованием this
в функции стрелки. Javascript scoping дает другое значение для this
, если функция является функцией стрелки.
Кроме того, я предлагаю использовать фильтр.
.map
используется для преобразования A -> B .
.filter
следует использовать для отфильтровывания объектов.
Теперь, если мы объединим это, это станет чем-то вроде этого.
function filterById(token) {
return this.$store.state.id !== this.tokensData[token].id;
}
function getTokenData(token) {
return this.tokensData[token]
}
const token = Object.keys(this.tokensData)
.filter(filterById)
.map(getTokenData);
});
Обратите внимание что я не использую функции стрелок. Функция стрелки не может ссылаться на this
из-за способа, которым javascript обрабатывает область видимости.
Альтернативным подходом может быть ссылка this
на переменная, так что ваша функция стрелка может получить доступ к переменной.
const self = this;
const token = Object.keys(this.tokensData)
.filter(token => self.$store.state.id !== self.tokensData[token].id)
.map(token => self.tokensData[token]);
Слишком даже лучше, чем вы могли бы использовать Object.entries. Это вернет массив ключей и значений, которые вы можете деструктурировать с помощью синтаксиса es6 следующим образом: [key, value]
.
const self = this;
const token = Object.entries(this.tokensData)
.filter(([key, value]) => self.$store.state.id !== value.id)
.map(([key, value]) => value);