Почему функция forEach не позволяет мне возвращать объект или даже просто передавать его из функции? - PullRequest
0 голосов
/ 04 февраля 2019

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

имя-значения верное, я уже знаю состояние vuex.Elenco - это массив, полученный JSON, он работает, потому что я использую его в v-for и в двух других функциях (ни одна не использует функцию forEach).Оператор if работает хорошо, иначе он не будет отображать первое «i».

let name = this.$store.state.favTime.id;
console.log(name);
Elenco.forEach(element => {
    if(element.name === name){
        var i = element;
        console.log(i); //element
    }
});
console.log(i); //undefined

Я хотел бы просто получить доступ к этому объекту, чтобы я мог манипулировать им, но не могу, потому что он не определен.

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

Ответы [ 4 ]

0 голосов
/ 04 февраля 2019

Это проблема локальной и глобальной области видимости переменных.Переменные, созданные внутри циклов for, имеют локальную ссылку, поэтому объявляйте их глобально.

var name = "Johnny";

var Elenco = [
  {
    name: "Jack Torrance",
    age: 50,
    eyeColor: "blue"
  },
  {
    name: "Toni",
    age: 8,
    eyeColor: "blue"
  },
  {
    name: "Johnny",
    age: 50,
    eyeColor: "blue"
  }
];
var i = new Array();
Elenco.forEach(element => {
    if(element.name === name){
        i.push(element);
        console.log(i); //element
    }
});
console.log(i);


Screenshot of the console

0 голосов
/ 04 февраля 2019

вы можете использовать .find ()

let name = this.$store.state.favTime.id;

let elem = Elenco.find(element => {
    return element.name === name
});

console.log(element);

Метод find () возвращает значение первого элемента вмассив, который удовлетворяет предоставленной функции тестирования.В противном случае возвращается undefined.

Если вы хотите найти последний элемент, вы можете обратить массив:

let name = this.$store.state.favTime.id;

let elem = [...Elenco].reverse().find(element => {
    return element.name === name
});

console.log(element);
0 голосов
/ 04 февраля 2019

Я предлагаю вам использовать find вместо forEach для вашего варианта использования, если доступно.

const name = this.$store.state.favTime.id;
const favourite = Elenco.find(element => element.name === name)
console.log(favourite)
0 голосов
/ 04 февраля 2019

Если вам нужен доступ к этой переменной после цикла for, объявите ее перед циклом:

var i;
Elenco.forEach(element => {
    if(element.name === name){
        i = element;
        console.log(i); //element
    }
});
console.log(i);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...