programing

Lodash를 사용하여 목록에서 요소를 제거하려면 어떻게 해야 합니까?

lastmemo 2023. 5. 11. 23:31
반응형

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목적어?

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

Lyons가 댓글에서 지적했듯이, 이것을 하는 더 관용적이고 진부한 방법은 다음과 같이 사용하는 것입니다.

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

이와 별도로, 현재 요소를 제거해야 하는지 여부를 결정하는 데 사용될 술어 함수를 전달할 수 있습니다.

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

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

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

또는

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

그냥 바닐라 JS로.를 사용하여 요소를 제거할 수 있습니다.

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;
});

가장 쉽고 편리한 방법은 -

_.without([2, 1, 2, 3], 1, 2);
// => [3]

_.without 문서화

제가 알기로는 4가지 방법이 있습니다.

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

나중에 제가 찾을 수 있도록 기록을 만드는 것에 대한 대답입니다.

전통적인 익명 함수 대신 술어를 사용하는 @the fourtheye 답변 외에도 다음과 같은 답변이 있습니다.

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

OR

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

로다쉬와 활자 원고

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

이것은 배열과 인덱스 번호로 삭제하는 간단한 lodash 함수입니다.

index_tobe_delete = 1

fruit = [{a: "apple"}, {b: "banana"}, {c: "choco"}]
_.filter(fruit, (value, key)=> {
return (key !== index_tobe_delete)
})

일부 lodash 함수와 splice를 포함하는 removeItemFromArrayByPath 함수를 사용할 수 있습니다.

/**
 * Remove item from array by given path and index
 *
 * Note: this function mutates array.
 *
 * @param {Object|Array} data (object or array)
 * @param {Array|String} The array path to remove given index
 * @param {Number} index to be removed from given data by path
 *
 * @returns {undefined}
 */

const removeItemFromArrayByPath = (data, arrayPath, indexToRemove) => {
  const array = _.get(data, arrayPath, []);
  if (!_.isEmpty(array)) {
    array.splice(indexToRemove, 1);
  }
};

를 확인할 수 있습니다. https://codepen.io/fatihturgut/pen/NWbxLNv

언급URL : https://stackoverflow.com/questions/21281286/how-can-i-remove-an-element-from-a-list-with-lodash

반응형