반응형
JavaScript 개체를 통해 루프하는 모범 사례
다음 JavaScript 오브젝트가 있습니다.이 오브젝트는 임의의 숫자 값 필드에 parseFloat을 적용해야 합니다(ngTable이 올바르게 정렬됩니다).
이걸 하기 위해 오브젝트를 루핑하는 게 너무 힘들어요.네스트 해봤어요angular.forEach
단, 스코핑에 문제가 있습니다(내부 루프는 외부 변수를 인식하지 않습니다).
어떻게 접근하면 좋을까요?
오브젝트명(Person 및 Person Details)은 동적입니다.:/
목적:
{
"data": [
{
"Person": {
"id" : "1",
"age": "23",
"days": "5",
"first_name": "Joe",
"last_name": "Smith",
},
"PersonDetails": {
"id": "4",
"name": "Cousin",
"oldest: "2",
}
},
{
"Person": {
"id" : "2",
"age": "18",
"days": "3",
"first_name": "John",
"last_name": "Doe",
},
"PersonDetails": {
"id": "4",
"name": "Second Cousin",
"oldest: "3",
}
}
...
...
]
};
다음과 같은 테스트를 수행할 수 있습니다.
function representsNumber(str) {
return str === (+str).toString();
}
// E.g. usage
representsNumber('a'); // false
representsNumber([]); // false
representsNumber(1); // false (it IS a number)
representsNumber('1.5'); // true
representsNumber('-5.1'); // true
representsNumber('NaN'); // true
모든 노드에서 재발합니다.과잉 살상의 예:
function seeker(o, test, _true, _false) {
_true || (_true = function (e) {return e;});
_false || (_false = function (e) {return e;});
function recursor(o) {
var k;
if (o instanceof Array)
for (k = 0; k < o.length; ++k) // Iterate over an array
if (typeof o[k] !== 'object')
o[k] = test(o[k]) ? _true(o[k]) : _false(o[k]);
else
recursor(o[k]);
else
for (k in o) // Iterate over an object
if (typeof o[k] !== 'object')
o[k] = test(o[k]) ? _true(o[k]) : _false(o[k]);
else
recursor(o[k]);
}
if (typeof o === "object")
return recursor(o), o;
else
return test(o) ? _true(o) : _false(o); // Not an object, just transform
}
// Sample usage
seeker({foo: [{bar: "20"}]}, representsNumber, parseFloat);
// {foo: [{bar: 20}]}
언급URL : https://stackoverflow.com/questions/23037835/best-practice-looping-through-a-javascript-object
반응형
'source' 카테고리의 다른 글
각도에서의 $window.location.replace를 조롱하는 방법JS 유닛 테스트? (0) | 2023.03.18 |
---|---|
봄 JUnit:자동 배선 구성 요소에서 자동 배선 구성 요소를 모의하는 방법 (0) | 2023.03.18 |
리액트/타이프스크립트의 소품으로 열거를 사용하는 방법 (0) | 2023.03.18 |
ReactJS - 커스텀이벤트 리스너 컴포넌트에 추가 (0) | 2023.03.18 |
명령줄의 sqlplus 문 (0) | 2023.03.18 |