Как лучше написать это, например, lodash - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу проверить каждый дочерний элемент в массиве, могу ли я написать его лучше, например, с помощью lodash

test[1] && test[1][2] && test[1][2][3] && doSomething

Ответы [ 3 ]

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

Существует 3 распространенных способа получить / проверить пути с помощью lodash:

  1. _. get - который попытается получитьзначение на основе пути и укажите default, если это значение не найдено

  2. _. имеет - что даст вам логический результат, еслипуть найден или нет _. hasIn - который похож на has, но также проверяет, является ли путь прямым или унаследованным свойством объекта

  3. _. результат - который прошел бы по пути и выполнил бы любую функцию, чтобы получить значение или работать как _.get в противном случае (нетфункции присутствуют)

var data = [
        [],
        [
          [],
          [
           'hello',
	   function(){ return 'foo'}
          ]
        ]
    ];
		
console.log('get:', _.get(data, '1.1.0'))
console.log('has:', _.has(data, '1.1.0'))

console.log('result:', _.result(data, '1.1.0'))
console.log('result:', _.result(data, '1.1.1'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>

Общим здесь является то, что все они принимают path в качестве параметра, который может делать то, что вы хотите.Просто укажите путь deepest и позвольте этим методам проверить / работать на вас.

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

с _.get вы можете получить значение в пути или вернуть значение по умолчанию:

_.get(test, [1, 2, 3], doSomething);
0 голосов
/ 28 ноября 2018

Вы можете проверить с помощью _.has(object, path)

Проверяет, является ли path прямым свойством object.

_.has(test, '[1][2][3]') && doSomething;

или

_.has(test, [1, 2, 3]) && doSomething;

Если вы хотите получить значение, возьмите _.get(object, path, [default])

var test = [
        [],
        [
            [],
            [],
            [
                [], [], [], 42
            ]
        ]
    ];

console.log(test[1][2][3]);
console.log(_.has(test, '[1][2][3]'));
console.log(_.has(test, [1, 2, 3]));

console.log(_.has(test, '[1][2][30]'));
console.log(_.has(test, [1, 2, 30]));

console.log(_.get(test, '[1][2][3]'));
console.log(_.get(test, [1, 2, 3]));

console.log(_.get(test, '[1][2][30]'));
console.log(_.get(test, [1, 2, 30]));
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
...