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
'programing' 카테고리의 다른 글
단일 스프링 부트 테스트 속성 재정의 (0) | 2023.03.18 |
---|---|
$exists가 $cond 내에 있는 조건부 그룹화 (0) | 2023.03.18 |
jQuery grep()를 사용한 JSON 배열 필터링 (0) | 2023.03.18 |
Wordpress가 웹 루트에 설치되어 있는 하위 디렉토리에서 Joomla 웹 사이트를 실행하는 방법 (0) | 2023.03.18 |
WP_Ajax_UnitTestCase가 WPAjaxDieStopException을 슬로우하지 않음 (0) | 2023.03.18 |