简体   繁体   中英

Find matching item across multiple store arrays in VueX

Currently when I want to find single item in an array that is in store I use this:

this.matched = this.$store.state.itemlist.find(itemId=> {
      return itemId.id == "someid";
    });

Lets says I want to go over multiple arrays to find the matching item given provided ID? Like i have itemlist1 itemlist2 itemgetter() ... Some of the arrays are getters ( but I think it doesnt change much). So basically I want to search over different state and getter items in this component instead of searching over one as in example above.

if you just want to find if its exist in one the arrays you can simply write function like this

function find(search,...arrs){
  return arrs.flat(1).find(item => item == search) 
}

this function merge all arrays to one long array and search in it

example of usage

let a=[1,2,3,4]
let b=[5,6,7,8]
let c=[9,10,11,12]

let i=find(6,a,b)
console.log(i)

Using one object to group all the arrays, so that will be possible to iterate over them. The idea is something like below:

const store = new Vuex.Store({
 state: {
    itemsGroupArrays: {
      items1: [{ id: 1, text: "item1 - 1" }, { id: 2, text: "item1 - 2" }],
      items2: [{ id: 3, text: "item2 - 1" }, { id: 4, text: "item2 - 2" }]
    }    
  },
  getters: {
    getItemByIdFromStateGroupArrays: state => (id) => {
      let returnedItem = null;
      Object.values(state.itemsGroupArrays).forEach((itemStateArray) => {
        if (itemStateArray.some(item => item.id === id))  {
          returnedItem = itemStateArray.find(item => item.id === id);
        }
      })                
      return returnedItem;
    }
  }
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM