Не удалось удалить элемент массива - PullRequest
3 голосов
/ 05 февраля 2020

Я создаю страницу, которая отфильтрует некоторые предложения, где пользователь может проголосовать за наиболее интересные для него.

Я делю этот экран на 3 вкладки [Лучшие оценки], [ Новейшие] и [Мои голоса] При запуске экрана я звоню в базу данных, которая приносит все предложения, я делаю это с axios

axios
      .get("/sugestoes/carregar/xxxx")
      .then(res => {
        this.sugestoesGeral = res.data.sugestoes

        for(var i=0; i < this.sugestoesGeral.length; i++){
          if(this.sugestoesGeral[i].meu_voto === "S"){
            this.meusVotos.splice(1, 0, this.sugestoesGeral[i])
          }
        }

        this.maisVotados     = [...this.sugestoesGeral]
        this.maisNovos       = [...this.sugestoesGeral] 
        this.ordernarArrVotos(this.maisVotados)
      })
      .catch(err => {
        console.log(err);
      });

Таким образом, я запускаю три разных массива из первый вызов в базе данных

Когда пользователь голосует за предложение, я переупорядочиваю массивы в соответствии с их вкладками [Лучшие оценки], [Новые] и [Мои голоса]

this.moreVoted и this.moreNew массивы переупорядочиваются без проблем. Однако мне нужно выполнить другие действия с массивом this.meusVotes, кроме простого переупорядочения, мне нужно проверить, удалил ли он голос, если я сделал это, мне нужно удалить эту позицию из массива, а затем показать ее снова пользователю

Чтобы удалить позицию из массива, я делаю следующее:

for(var i=0; i < this.sugestoesGeral.length; i++){
        if(this.sugestoesGeral[i].meu_voto === 'N'){
          var length = this.meusVotos.length
          for(var x=0; x < length; x++){
            if(this.meusVotos[x].id_sugestao === this.sugestoesGeral[i].id_sugestao){
              this.meusVotos.splice(x, 1)
            }
          }
        }
      }

console.log(this.meusVotos)

Однако этот способ не имеет никакого эффекта и не удаляет какую-либо позицию из моего массива. Просто для тестирования я сделал следующее:

this.meusVotos.shift()
console.log(this.meusVotos)

Но результат тот же, элементы не удалены из массива. Самое любопытное, что я сделал копию этих массивов для тестирования на browser console, и она работает без ошибок. Следующий пример отлично работает с массивами console:

:

sugestoesGeral = [
                    {
                        status_atual: "Em votação",
                        categoria: "Parâmetros",
                        quantidade_votos: 1,
                        meu_voto: "S",
                        id_sugestao: 16,
                        titulo: "Alerta de Valor Excedente por Cliente no MDF-e",
                        data_criacao: "29/01/2020",
                        descricao_resumida: "Alerta de Valor Excedente por Cliente no MDF-e",
                        motivo_rejeicao: "",
                        data_rejeicao: "",
                        data_implementacao: "",
                        data_previsao_execucao: "",
                        data_encerramento_votacao: "",
                        cor: "#b8dbff"
                    },
                    {
                        status_atual: "Em votação",
                        categoria: "Despesas",
                        quantidade_votos: 1,
                        meu_voto: "N",
                        id_sugestao: 7,
                        titulo: "Nova coluna Controle de Despesas",
                        data_criacao: "28/01/2020",
                        descricao_resumida: "Checar vínculo financeiro da Despesa quando vinculada a uma Nota com Financeiro lançado",
                        motivo_rejeicao: "",
                        data_rejeicao: "",
                        data_implementacao: "",
                        data_previsao_execucao: "",
                        data_encerramento_votacao: "",
                        cor: "#b8dbff"
                    }
                ]

meusVotos = [
                    {
                        status_atual: "Em votação",
                        categoria: "Parâmetros",
                        quantidade_votos: 1,
                        meu_voto: "S",
                        id_sugestao: 16,
                        titulo: "Alerta de Valor Excedente por Cliente no MDF-e",
                        data_criacao: "29/01/2020",
                        descricao_resumida: "Alerta de Valor Excedente por Cliente no MDF-e",
                        motivo_rejeicao: "",
                        data_rejeicao: "",
                        data_implementacao: "",
                        data_previsao_execucao: "",
                        data_encerramento_votacao: "",
                        cor: "#b8dbff"
                    },
                    {
                        status_atual: "Em votação",
                        categoria: "Despesas",
                        quantidade_votos: 1,
                        meu_voto: "N",
                        id_sugestao: 7,
                        titulo: "Nova coluna Controle de Despesas",
                        data_criacao: "28/01/2020",
                        descricao_resumida: "Checar vínculo financeiro da Despesa quando vinculada a uma Nota com Financeiro lançado",
                        motivo_rejeicao: "",
                        data_rejeicao: "",
                        data_implementacao: "",
                        data_previsao_execucao: "",
                        data_encerramento_votacao: "",
                        cor: "#b8dbff"
                    }
                ]

for l oop для удаления элемента:

for(var i=0; i < this.sugestoesGeral.length; i++){
        if(this.sugestoesGeral[i].meu_voto === 'N'){
          var length = this.meusVotos.length
          for(var x=0; x < length; x++){
            if(this.meusVotos[x].id_sugestao === this.sugestoesGeral[i].id_sugestao){
              this.meusVotos.splice(x, 1)
            }
          }
        }
      }

Any помощь будет приветствоваться

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

попробуйте

for(var i=0; i < this.sugestoesGeral.length; i++){
   if(this.sugestoesGeral[i].meu_voto === 'N'){
      for(var x=0; x < this.meusVotos.length; x++){
         if(this.meusVotos[x].id_sugestao === this.sugestoesGeral[i].id_sugestao){
             this.meusVotos.splice(x, 1);
            }
          }
        }
      }

и посмотрите, как у вас получится.

, как я объяснил ранее, .splice() - это правильный способ удалить элемент из массива. Я предлагаю вам проверить, что значение x является числом и не превышает длину массивов. Возможно, вам придется изменить x < length на x < this.meusVotos.length, как я понимаю, length исправлено, и вы изменили массив без получения нового значения длины. this.meusVotos.length - это переменная, проверенная в режиме реального времени, а длина - stati c, она остается неизменной, если вы модифицируете массив, таким образом делая x из границ в некоторой точке.

1 голос
/ 05 февраля 2020

Я бы предложил создать вычисляемое свойство для каждого из следующих случаев: this.moreVoted, this.moreNew и this.meusVotes.

Таким образом, sugestoesGeral станет SSOT из этих свойств.

computed: {
  maisVotados() {
    return this.sugestoesGeral.sort((a, b) => {
      if (a.quantidade_votos > b.quantidate_votos) return 1;
      else if (a.quantidate_votos < b.quantidade_votos) return -1;
      return 0;
    })
  },
  maisNovos() {
    return this.sugestoesGeral.sort((a, b) => {
      let dateParts = a.data_criacao.split("/");
      const dateA = new Date(dateParts[2], dateParts[1] - 1, dateParts[0]);
      dateParts = b.data_criacao.split("/");
      const dateB = new Date(dateParts[2], dateParts[1] - 1, dateParts[0]);
      if (dateA > dateB) return 1;
      else if (dateA < dateB) return -1;
      return 0;
    });
  }
},
methods: {
  reordenarSugestoes() {
    this.meusVotos = this.sugestoesGeral.filter((sugestao) => sugestao.meu_voto === 'S');
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...