Vue.js/Vuex/getter/再帰的にオブジェクトを検索する

Vue.js/Vuex/getter/再帰的にオブジェクトを検索する

おそらく最も実装するであろう getter メソッドで、オブジェクトがあってオブジェクトの一部が配列になっていて、その配列の中にまったく同構造のオブジェクトが複数存在してという、簡単に言うとフォルダとファイルの関係のようなデータ構造の中から特定の捜査対象を抜き出すという実装

タイトルの通り再帰処理で実装する

{
    getters:{
        findById: (state, getters) => (id, item) => {
            if(item == null){
                return getters.findById(id, state.rootItem);
            }
            if(item.id == id){
                return item;
            }
            for(var i = 0; i < item.items.length; i++){
                var tmp = getters.findById(id, item.items[i]);
                if(tmp !== null){
                    return tmp;
                }
            }
            return null;
        }
    }
}

条件合致をすべて取得するモノ

{
    getters:{
        findAllByName: (state, getters) => (name, item) => {
            if(item == null){
                return getters.findById(id, state.rootItem);
            }
            var result = [];
            if(item.name == name){
                result.push(item);
            }
            for(var i = 0; i < item.items.length; i++){
                var tmp = getters.findAllByName(name, item.items[i]);
                result.push(...tmp);
            }
            return result;
        }
    }
}
javascript/vuejs/vuex/getter/recursive_state_search.txt · 最終更新: 2018-11-21 16:25 by ore