Разобрать путь к элементу массива из строки - PullRequest
0 голосов
/ 19 ноября 2018

Как я могу разобрать строку, подобную этой ""0.children.13.children.0", к пути к элементу массива в JavaScript? Пример: "0.children.13.children.0"> arr[0].children[13].children[0] Заранее спасибо!

1 Ответ

0 голосов
/ 19 ноября 2018

Использование одной строки и разбиение ее на . может привести к поломке, если у ваших объектов есть точки в ключах, такие как {'first.name':'John'}, поэтому, вероятно, лучше вместо этого предоставить массив со строками / целыми числами.

Вотреализация lodash get с той разницей, что он принимает путь только как строку:

var data = [
  {
    children: [
      {
        children: [{ name: 'got it' }],
      },
    ],
  },
  null,
];
const get = (object, path = '', defaultValue) => {
  const recur = (object, path, defaultValue) => {
    if (typeof object !== 'object') {
      return defaultValue;
    }
    if (path.length === 0) {
      return object;
    }
    if (object !== null && path[0] in object) {
      return recur(
        object[path[0]],
        path.slice(1),
        defaultValue,
      );
    }
    return defaultValue;
  };
  return recur(object, path.split('.'), defaultValue);
};
console.log(get(undefined, '', 'Hello World'));//defaults to hello world
console.log(get(data, 'does.not.exist', 'Hello World'));//defaults to hello world
console.log(get(data, '1', 'Hello World'));//will be null (data[0] is null)
console.log(get(data, '1.anything', 'Hello World'));//defaults to hello world
console.log(//gets item data[0].children[0].children[0]
  get(data, '0.children.0.children.0', 'Hello World'),
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...