[javascript] JavaScript를 사용하여 배열에서 객체 제거
배열에서 객체를 제거하려면 어떻게해야합니까? Kristian
에서 이름이 포함 된 개체를 제거하고 싶습니다 someArray
. 예를 들면 다음과 같습니다.
someArray = [{name:"Kristian", lines:"2,5,10"},
{name:"John", lines:"1,19,26,96"}];
나는 달성하고 싶다 :
someArray = [{name:"John", lines:"1,19,26,96"}];
답변
여러 가지 방법을 사용하여 배열에서 항목을 제거 할 수 있습니다.
//1
someArray.shift(); // first element removed
//2
someArray = someArray.slice(1); // first element removed
//3
someArray.splice(0, 1); // first element removed
//4
someArray.pop(); // last element removed
//5
someArray = someArray.slice(0, a.length - 1); // last element removed
//6
someArray.length = someArray.length - 1; // last element removed
position x
에서 element를 제거 하려면 다음을 사용하십시오.
someArray.splice(x, 1);
또는
someArray = someArray.slice(0, x).concat(someArray.slice(-x));
의 댓글에 대한 답글 @ chill182 : 사용 배열에서 하나 개 이상의 요소를 제거 할 수 있습니다 Array.filter
, 또는 Array.splice
결합 Array.findIndex
(참조 MDN을 ), 예를 들어,
// non destructive filter > noJohn = John removed, but someArray will not change
let someArray = getArray();
let noJohn = someArray.filter( el => el.name !== "John" );
log("non destructive filter > noJohn = ", format(noJohn));
log(`**someArray.length ${someArray.length}`);
// destructive filter/reassign John removed > someArray2 =
let someArray2 = getArray();
someArray2 = someArray2.filter( el => el.name !== "John" );
log("", "destructive filter/reassign John removed > someArray2 =",
format(someArray2));
log(`**someArray2.length ${someArray2.length}`);
// destructive splice /w findIndex Brian remains > someArray3 =
let someArray3 = getArray();
someArray3.splice(someArray3.findIndex(v => v.name === "Kristian"), 1);
someArray3.splice(someArray3.findIndex(v => v.name === "John"), 1);
log("", "destructive splice /w findIndex Brian remains > someArray3 =",
format(someArray3));
log(`**someArray3.length ${someArray3.length}`);
// Note: if you're not sure about the contents of your array,
// you should check the results of findIndex first
let someArray4 = getArray();
const indx = someArray4.findIndex(v => v.name === "Michael");
someArray4.splice(indx, indx >= 0 ? 1 : 0);
log("", "check findIndex result first > someArray4 (nothing is removed) > ",
format(someArray4));
log(`**someArray4.length (should still be 3) ${someArray4.length}`);
function format(obj) {
return JSON.stringify(obj, null, " ");
}
function log(...txt) {
document.querySelector("pre").textContent += `${txt.join("\n")}\n`
}
function getArray() {
return [ {name: "Kristian", lines: "2,5,10"},
{name: "John", lines: "1,19,26,96"},
{name: "Brian", lines: "3,9,62,36"} ];
}
<pre>
**Results**
</pre>
답변
다음 과 같은 일반적인 작업에 lodash.js 또는 sugar.js 를 사용하는 것이 좋습니다 .
// lodash.js
someArray = _.reject(someArray, function(el) { return el.Name === "Kristian"; });
// sugar.js
someArray.remove(function(el) { return el.Name === "Kristian"; });
대부분의 프로젝트에서 이와 같은 라이브러리가 제공하는 일련의 도우미 메소드를 갖는 것이 매우 유용합니다.
답변
깨끗한 해결책은 다음을 사용하는 것입니다 Array.filter
.
var filtered = someArray.filter(function(el) { return el.Name != "Kristian"; });
이것의 문제는 IE <9에서 작동하지 않는다는 것 입니다. 그러나 모든 브라우저에서이를 구현 하는 Javascript 라이브러리 (예 : underscore.js )의 코드를 포함 할 수 있습니다 .
답변
이건 어때요?
$.each(someArray, function(i){
if(someArray[i].name === 'Kristian') {
someArray.splice(i,1);
return false;
}
});
답변
표시된 “배열”이 잘못된 JavaScript 구문입니다. 중괄호 {}
는 속성 이름 / 값 쌍이있는 객체에 사용되지만 대괄호 []
는 배열에 사용됩니다.
someArray = [{name:"Kristian", lines:"2,5,10"}, {name:"John", lines:"1,19,26,96"}];
이 경우 .splice()
방법 을 사용하여 항목을 제거 할 수 있습니다 . 첫 번째 항목 (인덱스 0)을 제거하려면 다음과 같이 말합니다.
someArray.splice(0,1);
// someArray = [{name:"John", lines:"1,19,26,96"}];
인덱스를 모르지만 배열을 검색하여 이름이 “Kristian”인 항목을 찾으려면 다음을 수행하십시오.
for (var i =0; i < someArray.length; i++)
if (someArray[i].name === "Kristian") {
someArray.splice(i,1);
break;
}
편집 : 당신이 시도 할 수 있도록 그냥, 귀하의 질문에 “jQuery를”로 태그가 발견 $.grep()
방법을 .
someArray = $.grep(someArray,
function(o,i) { return o.name === "Kristian"; },
true);
답변
ES2015
let someArray = [
{name:"Kristian", lines:"2,5,10"},
{name:"John", lines:"1,19,26,96"},
{name:"Kristian", lines:"2,58,160"},
{name:"Felix", lines:"1,19,26,96"}
];
someArray = someArray.filter(person => person.name != 'John');
John 을 제거합니다 !
답변
array.filter ()를 사용할 수 있습니다.
예 :
someArray = [{name:"Kristian", lines:"2,5,10"},
{name:"John", lines:"1,19,26,96"}];
someArray = someArray.filter(function(returnableObjects){
return returnableObjects.name !== 'Kristian';
});
//someArray will now be = [{name:"John", lines:"1,19,26,96"}];
화살표 기능 :
someArray = someArray.filter(x => x.name !== 'Kristian')