programing

Javescript는 어레이에서 요소를 자동으로 제거합니다.

yoursource 2022. 8. 29. 23:29
반응형

Javescript는 어레이에서 요소를 자동으로 제거합니다.

javascript와 Vuex는 처음입니다.

나는 많이 가지고 있다Orders테이블에서(와 관련지어)state.runningOrders.data이 주문들을 선택하고 취소했습니다(그 결과, 이 주문들은CANCEL_ONE_ORDER서버로부터의 응답이 도착했을 때, 지정된 ID의 주문을 어레이에서 삭제했기 때문에, 테이블에서 확장 행이 없어집니다.취소 후에는 행이 없어야 합니다.하지만 시각적으로 볼 때 항상 몇 가지rows테이블 위에 남겨져 있습니다.

여러 개의 나사산이나 코루틴처럼 작동하는 것 같아요.그래서...state.runningOrders.data동시성 메키니즘이 필요해요

const actions = {
    async [CANCEL_ONE_ORDER](context, data) {
        const data_res = await RestClient.get("cancel_one_order", data.id +"/" + data.coin1+"/"+data.coin2);
        context.commit(CANCEL_ONE_ORDER_END, data_res.data);
    },
}

const mutations = {
[CANCEL_ONE_ORDER_END](state, res) {
        state.runningOrders.data = state.runningOrders.data.splice(state.runningOrders.data.findIndex(item => item.id === id), 1);
    },
}

어레이에서 요소를 (동시에) 삭제하는 방법

여러 개의 나사산이나 코루틴처럼 작동하는 것 같아요.

아니요. JavaScript는 영역별로(대략 글로벌 환경별로) 단일 스레드를 실행합니다.여러 스레드를 사용할 수 있지만 명시적인 공유 메모리 이외에는 동일한 데이터 구조에 액세스할 수 없습니다(대신 메시징을 통해 통신합니다).(로직 입력)async기능 A가 일시 중지된 경우 기능이 중복될 수 있습니다.await기능 B가 계속됩니다).

splice 삭제된 요소의 배열을 반환합니다.Yopu는 이 변수를 변수에 다시 할당하고 있습니다.

state.runningOrders.data = state.runningOrders.data.splice(state.runningOrders.data.findIndex(item => item.id === id), 1);

그것은 당신이 원하는 것과 정반대입니다.갱신하다data보존할 요소가 아닌 삭제한 요소의 배열로 표시됩니다.

대신 다음을 사용합니다.

state.runningOrders.data = state.runningOrders.data.filter(item => item.id !== id);

그러면 콜백 테스트와 일치하는 요소(이 경우 일치하지 않는 요소)에서 새로운 배열이 생성됩니다.id).

완전히 이해했는지 모르겠지만 테이블에서 행을 삭제하려고 하면(데이터베이스에서 오브젝트일 수 있음) 빈 행으로 끝납니다.

그 설명으로 보아 당신은 오브젝트를 삭제하는 것이 아니라 오브젝트 내의 데이터를 삭제하는 것 같습니다.그러면 빈 객체가 남아 빈 행이 생성됩니다.

언급URL : https://stackoverflow.com/questions/69810981/javescript-remove-elements-from-array-atomically

반응형