자바 스크립트 객체 push () 함수


102

나는 자바 스크립트 객체를 가지고 있습니다 (실제로 ajax 요청을 통해 데이터를 얻습니다).

var data = {};

나는 그것에 몇 가지를 추가했습니다.

data[0] = { "ID": "1"; "Status": "Valid" }
data[1] = { "ID": "2"; "Status": "Invalid" }

이제 잘못된 상태의 모든 개체를 제거하고 싶습니다 (그러나 모든 순서는 동일하게 유지).

var tempData = {};
for ( var index in data ) {
    if ( data[index].Status == "Valid" ) {
        tempData.push( data );
    }
}
data = tempData;

내 생각에는이 모든 것이 작동하지만 tempData.push함수가 아닌 오류가 발생합니다 . 배열과 동일하지 않은 이유를 이해하지만 그렇지 않으면 무엇을 할 수 있습니까?


4
배열 만 사용해야하는 것 같습니다
Esailija

답변:


132

push()객체가 아닌 배열 용 이므로 올바른 데이터 구조를 사용하세요.

var data = [];
// ...
data[0] = { "ID": "1", "Status": "Valid" };
data[1] = { "ID": "2", "Status": "Invalid" };
// ...
var tempData = [];
for ( var index=0; index<data.length; index++ ) {
    if ( data[index].Status == "Valid" ) {
        tempData.push( data );
    }
}
data = tempData;

9
+1이 나를 이겼습니다. for...in루프도 변경하는 것을 잊지 마십시오 .
Andy E

@MattBall 내 나쁜! 나는 그렇게 리뷰와 물건에 능숙하지 않다! :)
Shouvik

1
푸시는 배열입니다. 객체에 배열을 추가하는 방법이 있습니까?
Venkat 2015

1
연관 배열은 어떻습니까?
Kinnard Hockenhull

@KinnardHockenhull 죄송합니다. 질문을 이해하지 못합니다. 무엇을 요구하는지 명확히 할 수 있습니까?
Matt Ball

18

객체는 푸시 속성을 지원하지 않지만 인덱스를 키로 사용하여 저장할 수도 있습니다.

var tempData = {};
for ( var index in data ) {
  if ( data[index].Status == "Valid" ) { 
    tempData[index] = data; 
  } 
 }
data = tempData;

상태가 유효하지 않은 경우 개체를 제거하면 더 쉽습니다.

for(var index in data){
  if(data[index].Status == "Invalid"){ 
    delete data[index]; 
  } 
}

마지막으로 var temp를 만들 필요가 없습니다.


현재 문제를 해결에 어떻게 대답 도움이 영업 이익에 대한 답을 몇 가지 설명을 추가
K ρяσѕρєя

5

당신은 만들어야합니다 var tempData = new Array();

푸시는 배열 기능입니다.


9
new Array()안돼 []?
Matt Ball

3
[]는 새 배열을 만드는 대체 (바로 가기)입니다. [] 및 new Array ()로 만들 수 있습니다.
Alex Dn

6
[]배열을 만드는 기본 방법이고 다른 하나는 대안이며 덮어 쓸 수도 있습니다.
Esailija

6
참조 stackoverflow.com/questions/885156/...을 하는 이유에 대한 설명은 new Array()악한
조나스 Høgh

w3schools.com/js/js_obj_array.asp 새 배열은 일반 배열입니다. []가 기본으로 정의 된 곳은 어디입니까?
Alex Dn

3

Javascript 프로그래밍 언어는 함수형 프로그래밍 패러다임을 지원하므로 이러한 코드로 쉽게 수행 할 수 있습니다.

var data = [
    {"Id": "1", "Status": "Valid"},
    {"Id": "2", "Status": "Invalid"}
];
var isValid = function(data){
    return data.Status === "Valid";
};
var valids = data.filter(isValid);

2

나는 정말로 당신이 서버에서 객체를 얻고 출력에서 ​​객체를 얻고 싶다고 가정합니다.

Object.keys(data).map(k=> data[k].Status=='Invalid' && delete data[k])


0
    tempData.push( data[index] );

위의 정답에 동의하지만 .... 여전히 tempData에 추가하려는 데이터에 대한 색인 값을 제공하지 않습니다. [index] 값이 없으면 전체 배열이 추가됩니다.


문제 해결 방법을 자세히 설명해주십시오. 감사.
Leonid Glanz 15.

이것은 Matt Ball로부터 받아 들여진 대답을 수정하는 것입니다. 데이터를 반복 할 때 데이터 전체가 아닌 데이터 [index] 만 푸시해야합니다.
Jonathan Bergeron

-2

하다 :


var data = new Array();
var tempData = new Array();


4
new Array()안돼 []?
Matt Ball

new Array ();의 차이점에 유의하십시오. 그리고 새로운 어레이; 당신은 대안에 대해 말하는 대신 같은 질문에 대답 할 수 있어야한다 ..
조나단
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.