jQuery를 사용하여 JavaScript 객체에서 항목 추가 / 제거


82

다음과 같은 JavaScript 개체가 있습니다.

var data = {items: [
    {id: "1", name: "Snatch", type: "crime"},
    {id: "2", name: "Witches of Eastwick", type: "comedy"},
    {id: "3", name: "X-Men", type: "action"},
    {id: "4", name: "Ordinary People", type: "drama"},
    {id: "5", name: "Billy Elliot", type: "drama"},
    {id: "6", name: "Toy Story", type: "children"}
]};

이 목록에 항목을 추가 / 제거하려면 jQuery를 사용하여 어떻게해야합니까? 클라이언트는이 목록을 동적으로 수정할 수 있기를 원합니다.


2
이것은 JSON이 아닙니다. 이것은 객체 리터럴입니다 : benalman.com/news/2010/03/theres-no-such-thing-as-a-json ( 그리고 JSON 객체에 대한 십자군은 계속됩니다 .... )
Felix Kling

4
@Matt : 그렇습니다. 음, JSON은 텍스트 데이터 형식입니다. 그리고 따옴표로 묶인 코드는 문자열에 있더라도 JSON이 아닙니다 (JSON은 속성 이름에 큰 따옴표가 필요하기 때문입니다).
TJ Crowder

6
계몽 해주셔서 감사합니다. 그래도 JSON 객체처럼 보입니다! 다시 한 번 감사드립니다!
Bug Magnet

3
@Bug : JSON 표기법 {items: []}은 다음과 같습니다 {"items": []}.. 완전히 똑같지는 않습니다 (매우 비슷합니다. 다시 말하지만 JSON은 사용중인 객체 리터럴 표기법의 하위 집합입니다). JSON 을 역 직렬화 하면 결과는 개체 그래프입니다 (예 : JavaScript에서는 JavaScript 개체).
TJ Crowder

답변:


220

먼저, 인용 된 코드는 JSON 이 아닙니다 . 코드는 JavaScript 개체 리터럴 표기법입니다. JSON 은 더 쉬운 구문 분석을 위해 설계된 하위 집합입니다.

코드는 오브젝트 (정의 data배열 (함유) items객체) (AN 각각 id, name, 및 type).

이를 위해 jQuery가 필요하거나 필요하지 않으며 JavaScript 만 있으면됩니다.

항목 추가 :

data.items.push(
    {id: "7", name: "Douglas Adams", type: "comedy"}
);

그것은 끝에 추가됩니다. 중간에 추가하려면 아래를 참조하십시오.

항목 제거 :

여러 가지 방법이 있습니다. 이 splice방법은 가장 다양합니다.

data.items.splice(1, 3); // Removes three items starting with the 2nd,
                         // ("Witches of Eastwick", "X-Men", "Ordinary People")

splice 원래 배열을 수정하고 제거한 항목의 배열을 반환합니다.

중간에 추가 :

splice실제로 추가와 제거를 모두 수행합니다. splice메서드 의 서명 은 다음과 같습니다.

removed_items = arrayObject.splice(index, num_to_remove[, add1[, add2[, ...]]]);
  • index -변경을 시작할 인덱스
  • num_to_remove -해당 색인으로 시작하여이 많은 항목을 제거하십시오.
  • addN -... 다음 요소 삽입

따라서 다음과 같이 세 번째 위치에 항목을 추가 할 수 있습니다.

data.items.splice(2, 0,
    {id: "7", name: "Douglas Adams", type: "comedy"}
);

의미 : 인덱스 2에서 시작하여 0 개 항목을 제거한 후 다음 항목을 삽입합니다. 결과는 다음과 같습니다.

var data = {items: [
    {id: "1", name: "Snatch", type: "crime"},
    {id: "2", name: "Witches of Eastwick", type: "comedy"},
    {id: "7", name: "Douglas Adams", type: "comedy"},     // <== The new item
    {id: "3", name: "X-Men", type: "action"},
    {id: "4", name: "Ordinary People", type: "drama"},
    {id: "5", name: "Billy Elliot", type: "drama"},
    {id: "6", name: "Toy Story", type: "children"}
]};

일부를 제거하고 한 번에 추가 할 수 있습니다.

data.items.splice(1, 3,
    {id: "7", name: "Douglas Adams", type: "comedy"},
    {id: "8", name: "Dick Francis", type: "mystery"}
);

... 즉, 인덱스 1에서 시작하여 세 항목을 제거한 다음이 두 항목을 추가합니다. 결과 :

var data = {items: [
    {id: "1", name: "Snatch", type: "crime"},
    {id: "7", name: "Douglas Adams", type: "comedy"},
    {id: "8", name: "Dick Francis", type: "mystery"},
    {id: "4", name: "Ordinary People", type: "drama"},
    {id: "5", name: "Billy Elliot", type: "drama"},
    {id: "6", name: "Toy Story", type: "children"}
]};

안녕하세요, 새 항목을 푸시 할 때 'id'를 동적으로 정의 할 수 있도록 개체 데이터의 항목 수를 결정하려면; 어떻게할까요?
Hudson Atwell 2013 년

@HudsonAtwell : data.items배열입니다. 배열에는 length속성이 있습니다. :-)
TJ Crowder 2013 년

푸시 할 때 항상 "... has no method push"라는 메시지가 표시됩니다. 흠 ... 무슨 잘못을 알아낼 수 없습니다
SliQ의

@TJCrowder, 그것을 제거 할 수 있습니다 id = 5할 수있는 업데이트도 및 name위해 id=6Toy
Mourya

JSON 객체가 배열 대신 json 객체로 푸시해야하는 경우 Peter Drinnan의 아래 stackoverflow.com/a/17976034/2466650
Sai

19

스플 라이스 는 좋은데 모두가 스플 라이스를 설명해 주니까 설명하지 않았습니다. JavaScript에서 키워드 삭제 를 사용할 수도 있습니다 . 당신이 사용할 수있는 $를 .grep 이 사용 jQuery를 조작 할 수도.

jQuery 방식 :

data.items = jQuery.grep(
                data.items, 
                function (item,index) { 
                  return item.id !=  "1"; 
                });

방법 삭제 :

delete data.items[0]

PUSH를 추가하는 것은 접속이 무거운 기능이기 때문에 접속이 더 좋습니다. Splice는 새로운 배열을 생성합니다. 배열 크기가 크면 문제가 될 수 있습니다. delete는 때때로 유용합니다. 삭제 후 배열의 길이를 찾으면 길이에 변화가 없습니다. 따라서 현명하게 사용하십시오.


마지막 단락에서 무엇을 말하려고합니까? 안개가 너무 많아서 아무것도 이해하지 못했습니다.
Decebal

1
내려! 자신만을위한 정의되지 않은 관련 인덱스를 만들 삭제하지

13

jQuery를 사용하는 경우 확장 기능을 사용하여 새 항목을 추가 할 수 있습니다.

var olddata = {"fruit":{"apples":10,"pears":21}};

var newdata = {};
newdata['vegetables'] = {"carrots": 2, "potatoes" : 5};

$.extend(true, olddata, newdata);

그러면 다음이 생성됩니다.

{"fruit":{"apples":10,"pears":21}, "vegetables":{"carrots":2,"potatoes":5}};

8

그것은 JSON이 아니라 자바 스크립트 객체 일뿐입니다. JSON 은 Javascript 구문의 하위 집합을 사용하는 데이터의 텍스트 표현입니다.

jQuery를 사용하여 JSON을 조작하는 것에 대한 정보를 찾을 수없는 이유는 jQuery가 그렇게 할 수있는 것이없고 일반적으로 전혀 수행되지 않기 때문입니다. Javascript 객체의 형태로 데이터를 조작 한 다음 필요한 경우 JSON 문자열로 변환합니다. (그러나 jQuery에는 변환 방법이 있습니다.)

가지고있는 것은 단순히 배열을 포함하는 객체이므로 이미 가지고있는 모든 지식을 사용할 수 있습니다. 그냥 사용하는 data.items배열에 액세스 할 수 있습니다.

예를 들어 동적 값을 사용하여 배열에 다른 항목을 추가하려면 :

// The values to put in the item
var id = 7;
var name = "The usual suspects";
var type = "crime";
// Create the item using the values
var item = { id: id, name: name, type: type };
// Add the item to the array
data.items.push(item);

5

json 배열에 객체 추가

var arrList = [];
var arr = {};   
arr['worker_id'] = worker_id;
arr['worker_nm'] = worker_nm;
arrList.push(arr);

JSON에서 객체 제거

그것은 나를 위해 일합니다.

  arrList = $.grep(arrList, function (e) { 

        if(e.worker_id == worker_id) {
            return false;
        } else {
            return true;
        }
    });

해당 객체가없는 배열을 반환합니다.

도움이 되었기를 바랍니다.


3

글쎄, 그것은 단지 자바 스크립트 객체이므로 data.items일반적인 배열처럼 조작 할 수 있습니다 . 당신이 할 경우 :

data.items.pop();

당신의 items배열은 1 개 항목이 짧아집니다.


1

간단하게 :)

var my_form_obj = {};
my_form_obj.name = "Captain America";
my_form_obj.weapon = "Shield";

도움이 되었기를 바랍니다!


0

시험

data.items.pop();
data.items.push({id: "7", name: "Matrix", type: "adult"});

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.