[javascript] lodash를 사용하여 목록에서 요소를 제거하는 방법은 무엇입니까?

다음과 같은 객체가 있습니다.

var obj = {
    "objectiveDetailId": 285,
    "objectiveId": 29,
    "number": 1,
    "text": "x",
    "subTopics": [{
        "subTopicId": 1,
        "number": 1
    }, {
        "subTopicId": 2,
        "number": 32
    }, {
        "subTopicId": 3,
        "number": 22
    }]
}
var stToDelete = 2;

나는 한 lodash다른 것들에 대한 내 응용 프로그램에 설치되어 있어야합니다. 사용할 수있는 효율적인 방법이 있나요 lodash: 항목 삭제 {"subTopicId":2, "number":32}로부터 obj객체는?

아니면 이것을 수행하는 자바 스크립트 방법이 있습니까?



답변

의견에서 lyyons가 지적 했듯이이 작업을 수행하는 관용적이고 독창적 인 방법은 다음 _.remove과 같이 사용하는 것입니다.

_.remove(obj.subTopics, {
    subTopicId: stToDelete
});

그 외에도 현재 요소를 제거해야하는지 여부를 결정하는 데 사용되는 술어 함수를 전달할 수 있습니다.

_.remove(obj.subTopics, function(currentObject) {
    return currentObject.subTopicId === stToDelete;
});

또는 이전 배열을 필터링하여 새 배열을 만들고 _.filter동일한 객체에 다음과 같이 할당 할 수 있습니다

obj.subTopics = _.filter(obj.subTopics, function(currentObject) {
    return currentObject.subTopicId !== stToDelete;
});

또는

obj.subTopics = _.filter(obj.subTopics, {subTopicId: stToKeep});


답변

바닐라 JS 만 사용하십시오. splice요소를 제거하는 데 사용할 수 있습니다 .

obj.subTopics.splice(1, 1);

데모


답변

당신은 그것을 할 수 있습니다 _pull.

_.pull(obj["subTopics"] , {"subTopicId":2, "number":32});

참조를 확인하십시오


답변

이제 _.reject 를 사용하면 보관해야 할 내용 대신 제거해야 할 대상을 기준으로 필터링 할 수 있습니다.

달리 _.pull거나 _.remove, 배열에 만 작업이 ._reject어떤 작업을한다 Collection

obj.subTopics = _.reject(obj.subTopics, (o) => {
  return o.number >= 32;
});


답변

내가 아는 것처럼 네 가지 방법이 있습니다

const array = [{id:1,name:'Jim'},{id:2,name:'Parker'}];
const toDelete = 1;

첫번째:

_.reject(array, {id:toDelete})

두 번째는 :

_.remove(array, {id:toDelete})

이런 식으로 배열이 변경됩니다.

세번째는 :

_.differenceBy(array,[{id:toDelete}],'id')
// If you can get remove item 
// _.differenceWith(array,[removeItem])

마지막은 :

_.filter(array,({id})=>id!==toDelete)

나는 배우고있다 lodash

나중에 찾을 수 있도록 기록해 두십시오.


답변

@thefourtheye 답변 외에도 전통적인 익명 함수 대신 술어 를 사용하십시오 .

  _.remove(obj.subTopics, (currentObject) => {
        return currentObject.subTopicId === stToDelete;
    });

또는

obj.subTopics = _.filter(obj.subTopics, (currentObject) => {
    return currentObject.subTopicId !== stToDelete;
});


답변

lodash와 typescript

const clearSubTopics = _.filter(obj.subTopics, topic => (!_.isEqual(topic.subTopicId, 2)));
console.log(clearSubTopics);