Как найти подзначение ключа, используя obj[ключ].включает во вложенный объект?

#javascript #string #object #filter #nested

Вопрос:

Мне нужно найти ключ, содержащий значение «?причина» во вложенном объекте в javascript, который имеет следующий формат :

 ["del517",["dependency",[["posTag","di__gender=masc|number=sing|prontype=ind"],["edge","det"]]],["dependents",null],["parent","genere259"],["form",[["string","del517","del"]]],["synCat",[["lexClass","preposition"]]],["lexId","di"]]

["genere259",["footprints",["synXGiveRiseToYCxn"]],["parent","comportare259"],["dependents",["del517"]],["form",[["string","genere259","genere"]]],["dependency",[["posTag","s__gender=masc|number=sing"],["edge","nsubj"]]],["referent","?cause3"]]
 

Мне удалось использовать эту функцию :

 function filterIt(arr, searchKey) {
  return arr.filter(function(obj) {
    return Object.keys(obj).some(function(key) {
      return obj[key].includes(searchKey);
    })
  });
}
 

который я называю :

 console.log("find 'cause'", filterIt(string_transient,"?cause3"));
 

Это работает, и я получаю правильный ответ :

 "find 'cause'", [["genere269", ["footprints", ["synXGiveRiseToYCxn"]], ["parent", "comportare269"], ["dependents", ["del537"]], ["form", [["string", "genere269", "genere"]]], ["dependency", [["posTag", "s__gender=masc|number=sing"], ["edge", "nsubj"]]], ["referent", "?cause3"]]]
 

Проблема в том, что я хотел бы найти все значения «причина», а не только те, за которыми следует int 3, как в данном случае.

Если я вызову функцию следующим образом :

 console.log("find 'cause'", filterIt(string_transient,"?cause"));
 

или с помощью :

 console.log("find 'cause'", filterIt(string_transient,"cause"));
 

это больше не работает. Знаете ли вы обходной путь для этого?

Здесь вы можете найти правильный исходный ввод :

 [
   [
      "root",
      [
         "boundaries",
         [
            [
               "si1",
               0,
               1
            ],
            [
               "nota1",
               1,
               2
            ],
            [
               "immediatamente1",
               2,
               3
            ],
            [
               "come1",
               3,
               4
            ],
            [
               "un1",
               4,
               5
            ],
            [
               "meccanismo1",
               5,
               6
            ],
            [
               "del1",
               6,
               7
            ],
            [
               "genere1",
               7,
               8
            ],
            [
               "possa1",
               8,
               9
            ],
            [
               "comportare1",
               9,
               10
            ],
            [
               "automaticamente1",
               10,
               11
            ],
            [
               "una1",
               11,
               12
            ],
            [
               "divergenza1",
               12,
               13
            ],
            [
               "radicale1",
               13,
               14
            ],
            [
               "nella1",
               14,
               15
            ],
            [
               "distribuzione1",
               15,
               16
            ],
            [
               "del2",
               16,
               17
            ],
            [
               "capitale1",
               17,
               18
            ],
            [
               ".1",
               18,
               19
            ]
         ]
      ],
      [
         "form",
         [
            [
               "sequence",
               "si1",
               "nota1",
               "immediatamente1",
               "come1",
               "un1",
               "meccanismo1",
               "del1",
               "genere1",
               "possa1",
               "comportare1",
               "automaticamente1",
               "una1",
               "divergenza1",
               "radicale1",
               "nella1",
               "distribuzione1",
               "del2",
               "capitale1",
               ".1"
            ],
            [
               "string",
               ".1",
               "."
            ],
            [
               "string",
               "capitale1",
               "capitale"
            ],
            [
               "string",
               "distribuzione1",
               "distribuzione"
            ],
            [
               "string",
               "radicale1",
               "radicale"
            ],
            [
               "string",
               "divergenza1",
               "divergenza"
            ],
            [
               "string",
               "automaticamente1",
               "automaticamente"
            ],
            [
               "string",
               "genere1",
               "genere"
            ],
            [
               "string",
               "meccanismo1",
               "meccanismo"
            ],
            [
               "string",
               "immediatamente1",
               "immediatamente"
            ],
            [
               "string",
               "nota1",
               "nota"
            ],
            [
               "string",
               "si1",
               "si"
            ],
            [
               "meets",
               "capitale1",
               ".1",
               "?unit921"
            ],
            [
               "meets",
               "del2",
               "capitale1",
               "?unit920"
            ],
            [
               "meets",
               "distribuzione1",
               "del2",
               "?unit919"
            ],
            [
               "meets",
               "nella1",
               "distribuzione1",
               "?unit918"
            ],
            [
               "meets",
               "radicale1",
               "nella1",
               "?unit917"
            ],
            [
               "meets",
               "divergenza1",
               "radicale1",
               "?unit916"
            ],
            [
               "meets",
               "una1",
               "divergenza1",
               "?unit915"
            ],
            [
               "meets",
               "automaticamente1",
               "una1",
               "?unit914"
            ],
            [
               "meets",
               "comportare1",
               "automaticamente1",
               "?unit913"
            ],
            [
               "meets",
               "possa1",
               "comportare1",
               "?unit912"
            ],
            [
               "meets",
               "genere1",
               "possa1",
               "?unit911"
            ],
            [
               "meets",
               "del1",
               "genere1",
               "?unit910"
            ],
            [
               "meets",
               "meccanismo1",
               "del1",
               "?unit909"
            ],
            [
               "meets",
               "un1",
               "meccanismo1",
               "?unit908"
            ],
            [
               "meets",
               "come1",
               "un1",
               "?unit907"
            ],
            [
               "meets",
               "immediatamente1",
               "come1",
               "?unit906"
            ],
            [
               "meets",
               "nota1",
               "immediatamente1",
               "?unit905"
            ],
            [
               "meets",
               "si1",
               "nota1",
               "?unit904"
            ]
         ]
      ],
      [
         "meaning",
         null
      ],
      [
         "semCat",
         null
      ],
      [
         "synCat",
         null
      ]
   ],
   [
      "si1",
      [
         "parent",
         "nota1"
      ],
      [
         "dependents",
         null
      ],
      [
         "form",
         [
            [
               "string",
               "si1",
               "si"
            ]
         ]
      ],
      [
         "dependency",
         [
            [
               "posTag",
               "pc__clitic=yes|person=3|prontype=prs"
            ],
            [
               "edge",
               "expl"
            ]
         ]
      ]
   ],
   [
      "nota1",
      [
         "parent",
         null
      ],
      [
         "dependents",
         [
            "si1",
            "immediatamente1",
            "meccanismo1",
            "comportare1",
            ".1"
         ]
      ],
      [
         "form",
         [
            [
               "string",
               "nota1",
               "nota"
            ]
         ]
      ],
      [
         "dependency",
         [
            [
               "posTag",
               "v__mood=ind|number=sing|person=3|tense=pres|verbform=fin"
            ],
            [
               "edge",
               "root"
            ]
         ]
      ]
   ],
   [
      "immediatamente1",
      [
         "parent",
         "nota1"
      ],
      [
         "dependents",
         null
      ],
      [
         "form",
         [
            [
               "string",
               "immediatamente1",
               "immediatamente"
            ]
         ]
      ],
      [
         "dependency",
         [
            [
               "posTag",
               "b___"
            ],
            [
               "edge",
               "advmod"
            ]
         ]
      ]
   ],
   [
      "come1",
      [
         "dependency",
         [
            [
               "posTag",
               "e___"
            ],
            [
               "edge",
               "case"
            ]
         ]
      ],
      [
         "dependents",
         null
      ],
      [
         "parent",
         "meccanismo1"
      ],
      [
         "form",
         [
            [
               "string",
               "come1",
               "come"
            ]
         ]
      ],
      [
         "synCat",
         [
            [
               "lexClass",
               "conjunction"
            ]
         ]
      ],
      [
         "lexId",
         "come"
      ]
   ],
   [
      "un1",
      [
         "dependency",
         [
            [
               "posTag",
               "ri__definite=ind|gender=masc|number=sing|prontype=art"
            ],
            [
               "edge",
               "det"
            ]
         ]
      ],
      [
         "dependents",
         null
      ],
      [
         "parent",
         "meccanismo1"
      ],
      [
         "form",
         [
            [
               "string",
               "un1",
               "un"
            ]
         ]
      ],
      [
         "synCat",
         [
            [
               "lexClass",
               "undefArticle"
            ]
         ]
      ],
      [
         "lexId",
         "un"
      ]
   ],
   [
      "meccanismo1",
      [
         "parent",
         "nota1"
      ],
      [
         "dependents",
         [
            "come1",
            "un1"
         ]
      ],
      [
         "form",
         [
            [
               "string",
               "meccanismo1",
               "meccanismo"
            ]
         ]
      ],
      [
         "dependency",
         [
            [
               "posTag",
               "s__gender=masc|number=sing"
            ],
            [
               "edge",
               "obl"
            ]
         ]
      ]
   ],
   [
      "del1",
      [
         "dependency",
         [
            [
               "posTag",
               "di__gender=masc|number=sing|prontype=ind"
            ],
            [
               "edge",
               "det"
            ]
         ]
      ],
      [
         "dependents",
         null
      ],
      [
         "parent",
         "genere1"
      ],
      [
         "form",
         [
            [
               "string",
               "del1",
               "del"
            ]
         ]
      ],
      [
         "synCat",
         [
            [
               "lexClass",
               "preposition"
            ]
         ]
      ],
      [
         "lexId",
         "di"
      ]
   ],
   [
      "genere1",
      [
         "footprints",
         [
            "synXGiveRiseToYCxn"
         ]
      ],
      [
         "parent",
         "comportare1"
      ],
      [
         "dependents",
         [
            "del1"
         ]
      ],
      [
         "form",
         [
            [
               "string",
               "genere1",
               "genere"
            ]
         ]
      ],
      [
         "dependency",
         [
            [
               "posTag",
               "s__gender=masc|number=sing"
            ],
            [
               "edge",
               "nsubj"
            ]
         ]
      ],
      [
         "referent",
         "?cause3"
      ]
   ],
   [
      "possa1",
      [
         "dependency",
         [
            [
               "posTag",
               "vm__mood=sub|number=sing|person=3|tense=pres|verbform=fin"
            ],
            [
               "edge",
               "aux"
            ]
         ]
      ],
      [
         "dependents",
         null
      ],
      [
         "parent",
         "comportare1"
      ],
      [
         "form",
         [
            [
               "string",
               "possa1",
               "possa"
            ]
         ]
      ],
      [
         "synCat",
         [
            [
               "lexClass",
               "verb"
            ],
            [
               "modal",
               ""
            ],
            [
               "condizionale",
               ""
            ]
         ]
      ],
      [
         "lexId",
         "potere"
      ]
   ],
   [
      "comportare1",
      [
         "synCat",
         [
            [
               "condizionale",
               ""
            ],
            [
               "lexClass",
               "verb"
            ]
         ]
      ],
      [
         "referent",
         "?frame3"
      ],
      [
         "semValence",
         [
            [
               "actor",
               "?cause3"
            ],
            [
               "theme",
               "?effect3"
            ]
         ]
      ],
      [
         "meaning",
         [
            [
               "frame",
               "causation",
               "comportare",
               "?frame3"
            ],
            [
               "slot",
               "cause",
               "?frame3",
               "?cause3"
            ],
            [
               "slot",
               "effect",
               "?frame3",
               "?effect3"
            ]
         ]
      ],
      [
         "semCat",
         [
            [
               "frame",
               "causation"
            ]
         ]
      ],
      [
         "lexId",
         "comportare"
      ],
      [
         "form",
         [
            [
               "string",
               "comportare1",
               "comportare"
            ]
         ]
      ],
      [
         "parent",
         "nota1"
      ],
      [
         "dependents",
         [
            "genere1",
            "possa1",
            "automaticamente1",
            "divergenza1",
            "distribuzione1"
         ]
      ],
      [
         "dependency",
         [
            [
               "posTag",
               "v__verbform=inf"
            ],
            [
               "edge",
               "conj"
            ]
         ]
      ],
      [
         "footprints",
         [
            "synGiveRiseToLexCxn",
            "synXGiveRiseToYCxn"
         ]
      ]
   ],
   [
      "automaticamente1",
      [
         "parent",
         "comportare1"
      ],
      [
         "dependents",
         null
      ],
      [
         "form",
         [
            [
               "string",
               "automaticamente1",
               "automaticamente"
            ]
         ]
      ],
      [
         "dependency",
         [
            [
               "posTag",
               "b___"
            ],
            [
               "edge",
               "advmod"
            ]
         ]
      ]
   ],
   [
      "una1",
      [
         "dependency",
         [
            [
               "posTag",
               "ri__definite=ind|gender=fem|number=sing|prontype=art"
            ],
            [
               "edge",
               "det"
            ]
         ]
      ],
      [
         "dependents",
         null
      ],
      [
         "parent",
         "divergenza1"
      ],
      [
         "form",
         [
            [
               "string",
               "una1",
               "una"
            ]
         ]
      ],
      [
         "synCat",
         [
            [
               "lexClass",
               "undefArticle"
            ]
         ]
      ],
      [
         "lexId",
         "un"
      ]
   ],
   [
      "divergenza1",
      [
         "footprints",
         [
            "synXGiveRiseToYCxn"
         ]
      ],
      [
         "parent",
         "comportare1"
      ],
      [
         "dependents",
         [
            "una1",
            "radicale1"
         ]
      ],
      [
         "form",
         [
            [
               "string",
               "divergenza1",
               "divergenza"
            ]
         ]
      ],
      [
         "dependency",
         [
            [
               "posTag",
               "s__gender=fem|number=sing"
            ],
            [
               "edge",
               "obj"
            ]
         ]
      ],
      [
         "referent",
         "?effect3"
      ]
   ],
   [
      "radicale1",
      [
         "parent",
         "divergenza1"
      ],
      [
         "dependents",
         null
      ],
      [
         "form",
         [
            [
               "string",
               "radicale1",
               "radicale"
            ]
         ]
      ],
      [
         "dependency",
         [
            [
               "posTag",
               "a__number=sing"
            ],
            [
               "edge",
               "amod"
            ]
         ]
      ]
   ],
   [
      "nella1",
      [
         "dependency",
         [
            [
               "posTag",
               "a__gender=fem|number=sing"
            ],
            [
               "edge",
               "amod"
            ]
         ]
      ],
      [
         "dependents",
         null
      ],
      [
         "parent",
         "distribuzione1"
      ],
      [
         "form",
         [
            [
               "string",
               "nella1",
               "nella"
            ]
         ]
      ],
      [
         "synCat",
         [
            [
               "lexClass",
               "preposition"
            ]
         ]
      ],
      [
         "lexId",
         "nel"
      ]
   ],
   [
      "distribuzione1",
      [
         "parent",
         "comportare1"
      ],
      [
         "dependents",
         [
            "nella1",
            "capitale1"
         ]
      ],
      [
         "form",
         [
            [
               "string",
               "distribuzione1",
               "distribuzione"
            ]
         ]
      ],
      [
         "dependency",
         [
            [
               "posTag",
               "s__gender=fem|number=sing"
            ],
            [
               "edge",
               "nsubj"
            ]
         ]
      ]
   ],
   [
      "del2",
      [
         "dependency",
         [
            [
               "posTag",
               "e__gender=masc|number=sing"
            ],
            [
               "edge",
               "det"
            ]
         ]
      ],
      [
         "dependents",
         null
      ],
      [
         "parent",
         "capitale1"
      ],
      [
         "form",
         [
            [
               "string",
               "del2",
               "del"
            ]
         ]
      ],
      [
         "synCat",
         [
            [
               "lexClass",
               "preposition"
            ]
         ]
      ],
      [
         "lexId",
         "di"
      ]
   ],
   [
      "capitale1",
      [
         "parent",
         "distribuzione1"
      ],
      [
         "dependents",
         [
            "del2"
         ]
      ],
      [
         "form",
         [
            [
               "string",
               "capitale1",
               "capitale"
            ]
         ]
      ],
      [
         "dependency",
         [
            [
               "posTag",
               "s__gender=masc|number=sing"
            ],
            [
               "edge",
               "amod"
            ]
         ]
      ]
   ],
   [
      ".1",
      [
         "parent",
         "nota1"
      ],
      [
         "dependents",
         null
      ],
      [
         "form",
         [
            [
               "string",
               ".1",
               "."
            ]
         ]
      ],
      [
         "dependency",
         [
            [
               "posTag",
               "fs___"
            ],
            [
               "edge",
               "punct"
            ]
         ]
      ]
   ]
]
 

Комментарии:

1. Не могли бы вы предоставить правильные входные данные, данные, которые вы разместили, представляют собой два отдельных вложенных массива, и ваша функция ищет массив с объектами.

2. Конечно, я добавил правильный ввод, спасибо @ErwinvanHoof

Ответ №1:

Я создаю для вас песочницу. Я думаю, это то, что вам нужно. Мое предложение по решению-комбинация фильтра и регулярных выражений.

codesandbox :

https://codesandbox.io/s/amazing-mendeleev-lotfk?file=/src/index.js

код для решения:

 var regex= /cause/; // meaning is contains 'cause' and starts or ends with any other characters 
console.log([your_array].filter((x) => regex.exec(x))
);
 

примечание : Вы можете использовать одно и то же регулярное выражение в своей функции FILTERiT, не уверен, но оно все равно может возвращать 1 запись.

Комментарии:

1. Спасибо! это работает, хотя у меня есть еще два вопроса. Во-первых, мне нужно было бы иметь в результате только один с «?референтом ?причиной», а не те, например, с [«слот»,»причина»,»? фрейм3″,»? причина 3″]. (Я отредактировал свой вопрос с использованием моих исходных данных). Более того, как я могу вернуть только токен (например, «genere») в позиции 0, а не весь массив?