0

So, basically i use an HTML select filled with the arrays of registered users

<label >
  <b>
    <i style="opacity:0.8">Users:</i>
  </b>
</label>&nbsp;&nbsp;
<select
  class="form-control w-50 mb-5"
  style="display:inline;"
  v-model="filter"
  @change="userfilter"
>
  <option id="userbox" v-for="user in userlist" :key="user.userlist">{{user}}</option>
  <option>All</option>
</select>

than with v-model="filter" i set the filter value that initially is empty

export default {
name: "completed",
data() {
return {
  filter: "",
  userlist: "",
  archive: [],
  supportarchive: [],
  selecteduser: ""
};
},

I have also created a suppor-tarray supportarchive:[] which function is to fill the original array when this condition result true:

methods: {
userfilter: function() {
  this.selecteduser = this.filter;
  if (this.filter == "All") {
    this.supportarchive=[];
    this.archive = JSON.parse(localStorage.getItem("completedtasks"));
  } else {
    this.supportarchive = this.archive;
    this.archive = [];
    for (let i = 0; i < this.supportarchive.length; i++) {
      if (this.supportarchive.taskuserID == this.selecteduser) {           
        this.archive.push(this.supportarchive[i]);
      }
     }
    }
   }
  }

Ok so if the filter is all then i fill my array from the localStorage but if the filter has another value then i do a backup of my original array archive in supportarchive, then i empty the original one and if the condition is meeted i push the element of my supportarchive into my original one archive but it doesn't work and i don't know why

0

2 Answers 2

1

Is this.supportarchive an object and not an array? Then it has no length property and won't work in the loop.

One solution is to get the object keys and loop based on those;

var keys = Object.keys(this.supportarchive)
var tempArr = []
for (let i = 0; i < keys.length; i++) {

  let item = this.supportarchive[keys[i]];

  if (item.taskuserID == this.selecteduser) {
    // You should put this into a new temporary array.
    // Dont change the array you are looping
    // this.archive.push(this.supportarchive[i]);

    tempArr = item
  }
}

// Parse back into json
this.archive = JSON.parse(tempArr);
Sign up to request clarification or add additional context in comments.

Comments

0

in your code do something like this.supportarchive[i].taskuserID

methods: {
userfilter: function() {
  this.selecteduser = this.filter;
  if (this.filter == "All") {
    this.supportarchive=[];
    this.archive = JSON.parse(localStorage.getItem("completedtasks"));
  } else {
    this.supportarchive = this.archive;
    this.archive = [];
    for (let i = 0; i < this.supportarchive.length; i++) {
      if (this.supportarchive[i].taskuserID == this.selecteduser) {           
        this.archive.push(this.supportarchive[i]);
      }
     }
    }
   }
  }

Recommended method use filter on array

this.archive = this.supportarchive.filter(u => u.taskuserID === this.selecteduser);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.