[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')