programing

Javascript 객체 푸시() 함수

bestprogram 2023. 3. 18. 09:30

Javascript 객체 푸시() 함수

javascript 오브젝트를 가지고 있습니다(실제로 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함수가 아닙니다.어레이와 같지 않은 이유는 이해하지만, 그렇지 않으면 어떻게 할 수 있을까요?

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;

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

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를 작성할 필요가 없습니다.

만들어야 합니다.var tempData = new Array();

푸시는 Array 함수입니다.

Javascript 프로그래밍 언어는 기능 프로그래밍 패러다임을 지원하므로 이러한 코드를 사용하여 쉽게 수행할 수 있습니다.

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

이게 도움이 됐으면 좋겠어요.

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

let tempData = [];

tempData= data.filter((item)=>item.Status!='Invalid')

console.log(tempData)

    tempData.push( data[index] );

위의 정답에 동의합니다만...tempData에 추가할 데이터의 인덱스 값을 아직 제공하지 않았습니다.[index] 값이 없으면 어레이 전체가 추가됩니다.

서버로부터 오브젝트를 취득해, 출력에 오브젝트를 취득하고 싶다고 생각합니다.

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

var data = { 5: { "ID": "0", "Status": "Valid" } }; // some OBJECT from server response

data = { ...data,
  0: { "ID": "1", "Status": "Valid" },
  1: { "ID": "2", "Status": "Invalid" },
  2: { "ID": "3", "Status": "Valid" }
}

// solution 1: where output is sorted filtred array
let arr=Object.keys(data).filter(k=> data[k].Status!='Invalid').map(k=>data[k]).sort((a,b)=>+a.ID-b.ID);
  
// solution2: where output is filtered object
Object.keys(data).map(k=> data[k].Status=='Invalid' && delete data[k])
  
// show
console.log('Object',data);
console.log('Array ',arr);

Mozilla는 실제로 Push를 콜 메서드에 체인으로 연결하여 객체를 처리하는 방법을 보여줍니다.

"그것은 의도적으로 일반적이며, 우리는 그것을 유리하게 사용할 수 있습니다.Array.protype.push는 이 예에서 보듯이 오브젝트에 대해 정상적으로 동작할 수 있습니다.

객체 컬렉션을 저장하는 배열을 만들지 않습니다.대신 개체 자체에 컬렉션을 저장하고 Array.protype 호출을 사용합니다.이 방법을 통해 어레이를 다루고 있다고 생각하게 됩니다.JavaScript를 통해 원하는 방식으로 실행 컨텍스트를 확립할 수 있기 때문에 이 방법이 작동합니다.

const obj = {
  length: 0,

  addElem(elem) {
    // obj.length is automatically incremented
    // every time an element is added.
    [].push.call(this, elem);
  },
};

// Let's add some empty objects just to illustrate.
obj.addElem({});
obj.addElem({});
console.log(obj.length);
// → 2

obj는 배열이 아니지만 메서드 푸시는 실제 배열과 마찬가지로 obj의 길이 속성을 증가시키는 데 성공했습니다."

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push

데이터 때문에 오류가 발생하고 있습니다.push는 배열에서만 작동하며 개체에서는 작동하지 않습니다.

그러면 다음과 같은 작업을 수행할 수 있습니다.

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[index] = data[index];
}
}
data = tempData;

여기에 이미지 설명 입력

실행:


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

언급URL : https://stackoverflow.com/questions/8925820/javascript-object-push-function