JavaScript의 키 값을 기반으로 어레이 내의 객체 검색 및 삭제
배열에서 개체를 찾는 방법에 대해 몇 가지 방법을 시도했습니다. ID = var입니다. 찾은 경우 해당 개체를 배열에서 제거하고 새 개체 배열을 반환합니다.
데이터:
[
{"id":"88","name":"Lets go testing"},
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"}
]
jQuery $grep를 사용하여 어레이를 검색할 수 있습니다.
var id = 88;
var result = $.grep(data, function(e){
return e.id == id;
});
그러나 ID == 88일 때 개체 전체를 삭제하고 다음과 같이 데이터를 반환하려면 어떻게 해야 합니까?
데이터:
[
{"id":"99", "name":"Have fun boys and girls"},
{"id":"108", "name":"You are awesome!"}
]
jQuery를 사용하지 않는 경우의 해결 방법은 다음과 같습니다.
myArray = myArray.filter(function( obj ) {
return obj.id !== id;
});
ID에 대해 어레이를 GREP할 수 있지만 id == 88인 개체 전체를 삭제하려면 어떻게 해야 합니까?
반대 술어로 간단히 필터링:
var data = $.grep(data, function(e){
return e.id != id;
});
이를 단순화할 수 있으므로 여기서 jQuery를 사용할 필요가 없습니다.
var id = 88;
for(var i = 0; i < data.length; i++) {
if(data[i].id == id) {
data.splice(i, 1);
break;
}
}
목록을 반복하고 일치하는 ID를 찾은 다음 중단하면 루프가 종료됩니다.
ES6/2015에는 findIndex와 어레이 확산 연산자를 사용하여 이를 수행하는 새로운 방법이 있습니다.
const index = data.findIndex(obj => obj.id === id);
const newData = [
...data.slice(0, index),
...data.slice(index + 1)
]
다음과 같이 나중에 재사용할 수 있는 기능으로 전환할 수 있습니다.
function remove(array, key, value) {
const index = array.findIndex(obj => obj[key] === value);
return index >= 0 ? [
...array.slice(0, index),
...array.slice(index + 1)
] : array;
}
이렇게 하면 한 가지 방법을 사용하여 다른 키를 사용하여 항목을 제거할 수 있습니다(기준에 부합하는 개체가 없으면 원래 배열이 반환됩니다).
const newData = remove(data, "id", "88");
const newData2 = remove(data, "name", "You are awesome!");
또는 Array.protype:
Array.prototype.remove = function (key, value) {
const index = this.findIndex(obj => obj[key] === value);
return index >= 0 ? [
...this.slice(0, index),
...this.slice(index + 1)
] : this;
};
그리고 다음과 같이 사용합니다.
const newData = data.remove("id", "88");
const newData2 = data.remove("name", "You are awesome!");
var items = [
{"id":"88","name":"Lets go testing"},
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"}
];
jQuery를 사용하는 경우 다음과 같이 jQuery.grep를 사용합니다.
items = $.grep(items, function(item) {
return item.id !== '88';
});
// items => [{ id: "99" }, { id: "108" }]
items = items.filter(function(item) {
return item.id !== '88';
});
// items => [{ id: "99" }, { id: "108" }]
splice
과가있있 있있있다다
var data = [
{"id":"88","name":"Lets go testing"},
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"}
],
id = 88;
console.table(data);
$.each(data, function(i, el){
if (this.id == id){
data.splice(i, 1);
}
});
console.table(data);
ES6 네이티브 솔루션:
const pos = data.findIndex(el => el.id === ID_TO_REMOVE);
if (pos >= 0)
data.splice(pos, 1);
요소가 배열에 확실히 존재하는 경우:
data.splice(data.findIndex(el => el.id === ID_TO_REMOVE), 1);
프로토타입:
Array.prototype.removeByProp = function(prop,val) {
const pos = this.findIndex(x => x[prop] === val);
if (pos >= 0)
return this.splice(pos, 1);
};
// usage:
ar.removeByProp('id', ID_TO_REMOVE);
http://jsfiddle.net/oriadam/72kgprw5/
참고: 그러면 항목이 제거됩니다.어레이가 는, 「」를 사용해 .filter
이전 답변에서 언급한 바와 같이
const data = [
{"id":"88","name":"Lets go testing"},
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"}
];
여기서 ID 값이 "88"인 개체의 인덱스를 가져옵니다.
const index = data.findIndex(item => item.id === "88");
console.log(index); // 0
데이터 배열에서 지정된 개체를 제거하기 위해 스플라이스 함수를 사용합니다.
data.splice(index,1);
console.log(data); // [{"id":"99","name":"Have fun boys and girls"},{"id":"108","name":"You are awesome!"}]
아마도 당신은 찾고 있을 것이다.$.grep()
★★★★
arr = [
{"id":"88","name":"Lets go testing"},
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"}
];
id = 88;
arr = $.grep(arr, function(data, index) {
return data.id != id
});
Array.prototype.removeAt = function(id) {
for (var item in this) {
if (this[item].id == id) {
this.splice(item, 1);
return true;
}
}
return false;
}
이거면 될 거야, jsfiddle
sift
이러한 작업 및 훨씬 더 고도의 작업을 위한 강력한 수집 필터입니다.브라우저의 클라이언트 측 또는 Node.js의 서버 측으로 동작합니다.
var collection = [
{"id":"88", "name":"Lets go testing"},
{"id":"99", "name":"Have fun boys and girls"},
{"id":"108", "name":"You are awesome!"}
];
var sifted = sift({id: {$not: 88}}, collection);
다음과 같은 필터를 지원합니다.$in
,$nin
,$exists
,$gte
,$gt
,$lte
,$lt
,$eq
,$ne
,$mod
,$all
,$and
,$or
,$nor
,$not
,$size
,$type
, , , , 입니다.$regex
MongoDB 컬렉션필터링과 API 호환성을 추구합니다.
앞의 답변에 동의합니다.id로 객체를 찾아 삭제하는 간단한 방법은 다음과 같습니다.
var obj = JSON.parse(data);
var newObj = obj.filter(item => item.Id != 88);
완전 동일성을 테스트하는 경우 오브젝트 ID를 정수로 강제합니다.
var result = $.grep(data, function(e, i) {
return +e.id !== id;
});
Underscore.js를 사용하는 경우 키를 기반으로 개체를 쉽게 제거할 수 있습니다.
예를 들어:
var temp1=[{id:1,name:"safeer"}, // Temporary array
{id:2,name:"jon"},
{id:3,name:"James"},
{id:4,name:"deepak"},
{id:5,name:"ajmal"}];
var id = _.pluck(temp1,'id'); // Get id array from temp1
var ids=[2,5,10]; // ids to be removed
var bool_ids=[];
_.each(ids,function(val){
bool_ids[val]=true;
});
_.filter(temp1,function(val){
return !bool_ids[val.id];
});
언급URL : https://stackoverflow.com/questions/21659888/find-and-remove-objects-in-an-array-based-on-a-key-value-in-javascript
'IT' 카테고리의 다른 글
메서드 호출에서 범용 인수를 명시적으로 지정하기 위한 Java-syntax (0) | 2022.11.07 |
---|---|
데이터베이스 테이블에는 프라이머리 키가 없을 수 있습니까? (0) | 2022.11.07 |
NN 및 MySQL이 잘릴 수 있는 기타 특수 문자 (0) | 2022.11.07 |
InnoDB의 손상된 데이터 구조를 수정하는 방법 (0) | 2022.11.07 |
집약 쿼리의 프로시저 표시 또는 저장 (0) | 2022.11.07 |