регулярное выражение для доступа к вложенным объектам со строками - PullRequest
0 голосов
/ 20 февраля 2019
let obj = {
   "services": [{
      "service": "hello"
   },{
      "service": "helloAgain"
   }]
}

Я бы хотел сделать это:

let ret = parse(obj, "services[].service");
// ret => ["hello", "helloAgain"]

КАК ХОРОШО КАК

let ret = parse(obj, "services[0].service");
// ret => "hello"

с использованием lodash, с последним все в порядке, с:

_.get(obj, "services[0].service");

однако, они не поддерживают первый.

_. Map приблизится

_.map(obj.services, "service");
// => ["hello", "helloAgain"]

но я явно должен указать массив, скореечем желая гибкости определения его в виде строки.

Я думал, что подход будет использовать этот пост: Доступ к вложенным объектам JavaScript с помощью строкового ключа

, что интереснов частности:

s = s.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
s = s.replace(/^\./, '');           // strip a leading dot

, что позволит:

"services[0].service" //(and the regex will convert it to) services.0.service

Я подумал, смогу ли я изменить регулярное выражение, чтобы разрешить выше, а также:

services.*.service

Затем я бы написал логику для проверки * и затем сделал бы:

_.map(services, "service");

Надеюсь, я не слишком ошибочен.

...