2016-08-25 112 views
0

因此,直接回答這個問題,我在我的redux商店中有一個過濾器列表,並且有過濾器將被添加並從中刪除。意外的減少.filter結果

加法濾波器如下:

case ADD_FILTER: 
     return { 
     ...state, 
     filters: [ 
      ...state.filters, 
      action.filter 
     ] 
     }; 

按預期方式工作。但刪除過濾器時:

case REMOVE_FILTER: 
     return { 
     ...state, 
     filters: state.filters.filter(
      filter => filter.type !== action.filter.type && filter.name !== action.filter.name 
     ) 
     }; 

將從我的列表中刪除所有過濾器!

這裏是一個過濾器樣本表示:

{ 
    { 
     type: 'sampleType1' 
     name: 'value1' 
    }, 
    { 
     type: 'sampleType2' 
     name: 'value1' 
    }, 
    { 
     type: 'sampleStatus1' 
     name: 'value2' 
    }, 
    { 
     type: 'sampleStatus2' 
     name: 'value3' 
    }, 
} 

和行動:

export function addFilter(filter) { 
    return (dispatch) => { 
    dispatch({ 
     type: ADD_FILTER, 
     filter 
    }); 

    dispatch(load()); 
    }; 
} 

export function removeFilter(filter) { 
    console.log(filter); 
    return (dispatch) => { 
    dispatch({ 
     type: REMOVE_FILTER, 
     filter 
    }); 

    dispatch(load()); 
    }; 
} 

我懷疑必須有一個問題.filter()功能。

我希望我已經解釋了一切。

回答

1

如果你只是想指定的過濾器除去,你應該使用或||操作:

filter => filter.type !== action.filter.type || filter.name !== action.filter.name 
+0

似乎它的工作,但在邏輯上思考,如果我是正確的,這會說「過濾器鍵入不等於Action的過濾器類型,或者,過濾器名稱不等於Action的過濾器名稱「。這將刪除適合此參數的每個過濾器。 現在,我有一個過濾器對象(type = sampleType2,name = value1),它也會從存儲中移除第一個過濾器對象(type = sampleType1,name = value1)。 這不是我所期望的。 –

+1

(type = sampleType1,name = value1)的過濾器將不會被移除,因爲filter.type!== action.filter.type返回true,使整個語句成爲true並保留數組中的元素。 – slugo