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
'programing' 카테고리의 다른 글
다른 목록에서 한 목록을 빼려면 어떻게 해야 합니까? (1) | 2023.05.11 |
---|---|
Visual Studio 2010 - XAML 편집기의 속도가 매우 느립니다. (0) | 2023.05.11 |
C# 디렉터리에 있는 모든 파일을 재귀적으로 나열하는 방법은 무엇입니까? (0) | 2023.05.11 |
IFormatProvider의 역할은 무엇입니까? (0) | 2023.05.11 |
특성 오류: 'ElementExcel 파일을 가져오려고 할 때 Tree' 개체에 'getiterator' 특성이 없습니다. (0) | 2023.05.11 |