Как эффективно пропустить в глубине в ES6 - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть array вложенных object

Как удалить каждую пару key/value, начинающуюся с подчеркивания?

Пример: { id: 1, _link: true } => { id, 1 }

Это более полный пример данных:

{
    "data": [{
        "name": "te4ste",
        "projectId": 1,
        "productAndServicesCategoryList": [{
                "name": "b",
                "productAndServicesId": 1,
                "productAndServicesItemList": [{
                    "name": "w",
                    "productAndServicesCategoryId": 2,
                    "description": "w",
                    "version": null,
                    "createdDate": "2019-04-09T23:17:46.857Z",
                    "createdById": null,
                    "lastModifiedById": null,
                    "deleted": false,
                    "_links": {
                        "self": {
                            "href": "projects/services/contact-emails/emails/2"
                        }
                    },
                    "id": 2
                }],
                "description": "b",
                "version": null,
                "createdDate": "2019-04-09T22:24:37.508Z",
                "createdById": null,
                "lastModifiedById": null,
                "deleted": false,
                "_links": {
                    "self": {
                        "href": "projects/services/contact-emails/groups/2"
                    }
                },
                "id": 2
            },
            {
                "name": "a",
                "productAndServicesId": 1,
                "productAndServicesItemList": [{
                    "name": "c",
                    "productAndServicesCategoryId": 1,
                    "description": "c",
                    "version": null,
                    "createdDate": "2019-04-09T22:24:46.332Z",
                    "createdById": null,
                    "lastModifiedById": null,
                    "deleted": false,
                    "_links": {
                        "self": {
                            "href": "projects/services/contact-emails/emails/1"
                        }
                    },
                    "id": 1
                }],
                "description": "a",
                "version": null,
                "createdDate": "2019-04-09T22:24:32.717Z",
                "createdById": null,
                "lastModifiedById": null,
                "deleted": false,
                "_links": {
                    "self": {
                        "href": "projects/services/contact-emails/groups/1"
                    }
                },
                "id": 1
            }
        ],
        "description": "testset",
        "version": null,
        "createdDate": "2019-04-09T22:24:22.563Z",
        "createdById": null,
        "lastModifiedById": null,
        "deleted": false,
        "_links": {
            "self": {
                "href": "projects/services/newsletters/groups/1"
            }
        },
        "id": 1
    }],
    "total": 1
}

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

Вы можете создать рекурсивную функцию, которая смотрит на тип передаваемого объекта и действует соответственно. Для массивов передайте каждый элемент обратно, объектов, удалите ключи и верните потомки. Это изменит объекты на месте:

let data=  [{"name": "te4ste","projectId": 1,"productAndServicesCategoryList": [{"name": "b","productAndServicesId": 1,"productAndServicesItemList": [{"name": "w","productAndServicesCategoryId": 2,"description": "w","version": null,"createdDate": "2019-04-09T23:17:46.857Z","createdById": null,"lastModifiedById": null,"deleted": false,"_links": {"self": {"href": "projects/services/contact-emails/emails/2"}},"id": 2}],"description": "b","version": null,"createdDate": "2019-04-09T22:24:37.508Z","createdById": null,"lastModifiedById": null,"deleted": false,"_links": {"self": {"href": "projects/services/contact-emails/groups/2"}},"id": 2},{"name": "a","productAndServicesId": 1,"productAndServicesItemList": [{"name": "c","productAndServicesCategoryId": 1,"description": "c","version": null,"createdDate": "2019-04-09T22:24:46.332Z","createdById": null,"lastModifiedById": null,"deleted": false,"_links": {"self": {"href": "projects/services/contact-emails/emails/1"}},"id": 1}],"description": "a","version": null,"createdDate": "2019-04-09T22:24:32.717Z","createdById": null,"lastModifiedById": null,"deleted": false,"_links": {"self": {"href": "projects/services/contact-emails/groups/1"}},"id": 1}],"description": "testset","version": null,"createdDate": "2019-04-09T22:24:22.563Z","createdById": null,"lastModifiedById": null,"deleted": false,"_links": {"self": {"href": "projects/services/newsletters/groups/1"}},"id": 1}]

function remove_s(obj){
    if (!obj || typeof obj !== 'object') return
    Object.keys(obj).forEach(k => {
        if (k.startsWith('_')) delete obj[k]
        else remove_s(obj[k])
    }) 
}

remove_s(data)
console.log(data)
0 голосов
/ 10 апреля 2019
function filterUnderscoreKeys(arr) {
    return arr.map(obj => {
        const res = {};
        Object.keys(obj)
            .filter(k => k[0] !== '_')
            .forEach(k => res[k] = obj[k]);
        return res; 
    });
}
...