source

JavaScript 개체를 통해 루프하는 모범 사례

lovecheck 2023. 3. 18. 08:43
반응형

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

반응형