Найти соответствующий элемент в нескольких массивах магазинов в VueX - PullRequest
1 голос
/ 16 февраля 2020

В настоящее время, когда я хочу найти один элемент в массиве, который находится в магазине, я использую это:

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

Позволяет сказать, что я хочу go по нескольким массивам, чтобы найти соответствующий элемент с заданным ID ? Как у меня itemlist1 itemlist2 itemgetter() ... Некоторые массивы являются геттерами (но я думаю, что это не сильно изменится). Поэтому в основном я хочу искать в этом компоненте различные состояния и элементы получения вместо того, чтобы искать по одному, как в примере выше.

Ответы [ 2 ]

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

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

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;
    }
  }
});
1 голос
/ 16 февраля 2020

если вы просто хотите узнать, существует ли он в одном из массивов, вы можете просто написать функцию, подобную этой

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

эта функция объединяет все массивы в один длинный массив и ищет в нем

пример использования

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...