Как я могу использовать фильтр, чтобы вернуть новый массив минус один элемент, который был выбран? - PullRequest
0 голосов
/ 28 мая 2018

Я использую Flatlist для отображения списка элементов.В Componentwillmount я устанавливаю состояние результата выборки.

constructor() {
        super();
        this.state = {
            listOfCameras: [],
        };
    }

componentWillMount() {
        apiService.listCameras().then((res) => {
            this.setState({ listOfCameras: res });
        });
    }

Мой плоский список выглядит так:

createListOfCams() {
    return (
        <FlatList
            data={this.state.listOfCameras}
            renderItem={({ item, index }) => {
                return (
                    this.createSingleCamera(item, index)
                );
            }}
            keyExtractor={(item, index) => index.toString()}
            // extraData={}
        />
    );
}

и, наконец, мой createSingleCamera выглядит так:

createSingleCamera(item, index) {
   const modelCam = item.model;
    return (    
        <View style={styles.singleCamLineView}>
            <View style={styles.modelCamNameView}>
                <Text style={styles.singleCameraText}>{modelCam}</Text>
            </View>
            <View style={styles.deleteIconView}>
                <TouchableOpacity
                    onPress={() => {
                        this.deleteCamFromList(item, index);
                    }}
                >
                    <Text style={styles.singleCameraText}> </Text>
                </TouchableOpacity>
            </View>
        </View>
    );
}

То, что я хотел бы сделать, это передать индекс элемента, который я хочу удалить, в метод deleteCamFromList, а затем использовать его для повторной визуализации плоского списка.

Пока мой deletefromCamList выглядит следующим образомthis:

deleteCamFromList(item, index) {
    let allCamerasBeforeDelete = [...this.state.listOfCameras];
    let newArryOfCams = allCamerasBeforeDelete.filter(index);
}

Как бы я использовал фильтр, чтобы вернуть новый массив минус индекс, который я ему предоставил?

1 Ответ

0 голосов
/ 28 мая 2018

Второй аргумент, заданный для Array.prototype.filter - это индекс элемента, поэтому:

deleteCamFromList(item, index) {
    let newArrayOfCams = this.state.listOfCameras.filter((_, i) => i !== index);
    this.setState({listOfCameras: newArrayOfCams})
}
...