簡體   English   中英

根據元素名稱停止深度嵌套的 JSON 數組項/對象

[英]Stop Deeply Nested JSON Array Items/Objects Based on Element Name

So, I'm relatively new to javascript, and I'm working with a client-side javascript function that inserts JSON results pushed to it from the server.

我想停止某些結果,與填充結果的 javascript 無關。

通常,如果 js 是我自己的,我會猜測我會使用“拼接”function 來刪除我不希望出現的 JSON 數組條目,這聽起來對嗎? (我通過在 StartPage 和這里的大量搜索到達那里)

但是,我需要任何 function 我(老實說,“你”)想出勝過嵌入式結果。

Essentially this is normal behaviour: Webpage > JavaScript Parses JSON for Initial Results then Webpage > Scroll > JavaScript Parses JSON for More Results

我想插入一些東西來阻止我不喜歡的任何 JSON 項目。 我不知道如何表示,我假設: Worker in Extension/Add-On > Webpage > etc 我懷疑這可以用 CSS 來完成......但這太棒了,正如我剛才所說它在我的個人。

如果是拼接,我會有一個模糊的想法(但我真的是瞎了眼)如何在拼接的基礎上做到這一點,但我已經在苦苦掙扎了,這對於瘋狂地深深嵌入的對象來說會加深我試圖排除。


所以。 我正在查看的部分中有很多json 數據。

我完全專注於在這里刪除數組,但最終目標是兩個部分:

  1. levelOneB的“ daContentShaper ”中的“ contents ”數組中,我想從數組中刪除子對象“ content ”中有一個名為“ contentTypeA ”的元素的任何項目。 還有另一個 object 和 label ' ahThisIsTheBContent ',我也希望它消失了,它點綴在 JSON 中。 所有其他項目(TypeB、TypeC 或其他)必須保留。
  2. 此外,在所述“ content ”object 中,我想將“ false ”的任何“ visible ”值更改為“ true ”。

這絕對是可能的,它只是在研究如何確保代碼的 rest (在其他地方可能有類似 - 不一樣 - 部分)不受我的這個數組拼接的影響。

{
    "levelOneA": {
        "levelOneAArr": [ { "name": "me", "age": 1 }, { "name": "you", "age": 2 }, { "name": "them", "age": 3 } ],
        "levelOneAText": "blah"
    },
    "levelOneB": {
        "levelOneBDeepBro": {
            "levelOneBDeepBroTabs": [
                {
                    "levelOneBDeepBroTabsShaper": {
                        "isBlessed": true,
                        "daContent": {
                            "daContentShaper": {
                                "contents": [
                                    {
                                        "contentItem": {
                                            "content": {
                                                "contentTypeA": {
                                                    "bitA": "bitAText",
                                                    "bitB": [
                                                        {
                                                            "bitBText1": "cripes"
                                                        },
                                                        {
                                                            "bitBText1": "crikey"
                                                        },
                                                        {
                                                            "bitBText1": "crimeny"
                                                        }
                                                    ],
                                                    "visible": true
                                                }
                                            },
                                            "extraNonsense": "bingoBlah"
                                        }
                                    },
                                    {
                                        "contentItem": {
                                            "content": {
                                                "ahThisIsTheBContent": {
                                                    "bitA": "bitAText",
                                                    "bitB": [
                                                        {
                                                            "bitBText1": "cripes"
                                                        },
                                                        {
                                                            "bitBText1": "crikey"
                                                        },
                                                        {
                                                            "bitBText1": "crimeny"
                                                        }
                                                    ],
                                                    "visible": false
                                                }
                                            },
                                            "extraNonsense": "bingoBlahBlah"
                                        }
                                    },
                                    {
                                        "contentItem": {
                                            "content": {
                                                "contentTypeB": {
                                                    "bitA": "bitAText",
                                                    "bitB": [
                                                        {
                                                            "bitBText1": "jinkies"
                                                        },
                                                        {
                                                            "bitBText1": "ruh roh"
                                                        },
                                                        {
                                                            "bitBText1": "like, wow"
                                                        }
                                                    ],
                                                    "visible": true
                                                }
                                            },
                                            "extraNonsense": "bingoBlahBlah"
                                        }
                                    },
                                    {
                                        "contentItem": {
                                            "content": {
                                                "contentTypeC": {
                                                    "bitA": "bitAText",
                                                    "bitB": [
                                                        {
                                                            "bitBText1": "cripes"
                                                        },
                                                        {
                                                            "bitBText1": "crikey"
                                                        },
                                                        {
                                                            "bitBText1": "crimeny"
                                                        }
                                                    ],
                                                    "visible": true
                                                }
                                            },
                                            "extraNonsense": "bingoBlahBlahBlah"
                                        }
                                    }
                                ],
                                "myDadIsBetter": "Go Faster Stripes, innit."
                            }
                        },
                        "tabId": "Bro"
                    }
                }
            ]
        }
    },
    "levelOneC": "CAAQhGciEwi0iqD5-ZbwAhUBPvEFHQMKAeo=",
    "levelOneD": {
        "iAmJustHappyToBeNominated": "innit",
        "damnYourWholePopCultureSubsection": "flames abound"
    }
}

這就是使用對象掃描解決此問題的方法

請注意,我在匹配中使用了很多** 您可以准確地寫出這些,這取決於您的要求

 // const objectScan = require('object-scan'); const data = { levelOneA: { levelOneAArr: [{ name: 'me', age: 1 }, { name: 'you', age: 2 }, { name: 'them', age: 3 }], levelOneAText: 'blah' }, levelOneB: { levelOneBDeepBro: { levelOneBDeepBroTabs: [ { levelOneBDeepBroTabsShaper: { isBlessed: true, daContent: { daContentShaper: { contents: [ { contentItem: { content: { contentTypeA: { bitA: 'bitAText', bitB: [ { bitBText1: 'cripes' }, { bitBText1: 'crikey' }, { bitBText1: 'crimeny' } ], visible: true } }, extraNonsense: 'bingoBlah' } }, { contentItem: { content: { ahThisIsTheBContent: { bitA: 'bitAText', bitB: [ { bitBText1: 'cripes' }, { bitBText1: 'crikey' }, { bitBText1: 'crimeny' } ], visible: false } }, extraNonsense: 'bingoBlahBlah' } }, { contentItem: { content: { contentTypeB: { bitA: 'bitAText', bitB: [ { bitBText1: 'jinkies' }, { bitBText1: 'ruh roh' }, { bitBText1: 'like, wow' } ], visible: false } }, extraNonsense: 'bingoBlahBlah' } }, { contentItem: { content: { contentTypeC: { bitA: 'bitAText', bitB: [ { bitBText1: 'cripes' }, { bitBText1: 'crikey' }, { bitBText1: 'crimeny' } ], visible: false } }, extraNonsense: 'bingoBlahBlahBlah' } } ], myDadIsBetter: 'Go Faster Stripes, innit.' } }, tabId: 'Bro' } } ] } }, levelOneC: 'CAAQhGciEwi0iqD5-ZbwAhUBPvEFHQMKAeo=', levelOneD: { iAmJustHappyToBeNominated: 'innit', damnYourWholePopCultureSubsection: 'flames abound' } }; const logic = { 'levelOneB.**.daContentShaper.contents[*].*.content.{contentTypeA,ahThisIsTheBContent}': ({ key, parents }) => { parents[3].splice(key[key.length - 4], 1); }, 'levelOneB.**.daContentShaper.contents.**.visible': ({ value, parent, property }) => { if (value === false) { parent[property] = true; } } }; const modify = objectScan(Object.keys(logic), { rtn: 'count', filterFn: ({ matchedBy, property, key, value, parent, parents }) => { matchedBy.forEach((m) => logic[m]({ property, key, value, parent, parents })); } }); console.log(modify(data)); // => 6 console.log(data); // => { levelOneA: { levelOneAArr: [ { name: 'me', age: 1 }, { name: 'you', age: 2 }, { name: 'them', age: 3 } ], levelOneAText: 'blah' }, levelOneB: { levelOneBDeepBro: { levelOneBDeepBroTabs: [ { levelOneBDeepBroTabsShaper: { isBlessed: true, daContent: { daContentShaper: { contents: [ { contentItem: { content: { contentTypeB: { bitA: 'bitAText', bitB: [ { bitBText1: 'jinkies' }, { bitBText1: 'ruh roh' }, { bitBText1: 'like, wow' } ], visible: true } }, extraNonsense: 'bingoBlahBlah' } }, { contentItem: { content: { contentTypeC: { bitA: 'bitAText', bitB: [ { bitBText1: 'cripes' }, { bitBText1: 'crikey' }, { bitBText1: 'crimeny' } ], visible: true } }, extraNonsense: 'bingoBlahBlahBlah' } } ], myDadIsBetter: 'Go Faster Stripes, innit.' } }, tabId: 'Bro' } } ] } }, levelOneC: 'CAAQhGciEwi0iqD5-ZbwAhUBPvEFHQMKAeo=', levelOneD: { iAmJustHappyToBeNominated: 'innit', damnYourWholePopCultureSubsection: 'flames abound' } }
 .as-console-wrapper {max-height: 100%;important: top: 0}
 <script src="https://bundle.run/object-scan@14.3.0"></script>

免責聲明:我是對象掃描的作者

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM