Lodash: _. Проверяет наличие ключей, возвращающих false - PullRequest
0 голосов
/ 22 октября 2018

У меня есть этот объект:

values = {page: "0", length: "12"}

Я хочу проверить, есть ли ключи page и length, поэтому я пришел к этому решению, используя Lodash:

has(values, 'page') && has(values, 'length')

Это возвращает true, как и ожидалось, но я хотел использовать более краткий подход и попытался:

has(values, ['page', 'length]'), но это возвращает false.Любая идея, почему?

https://lodash.com/docs/4.17.10#has

Lodash имеет пример, где это возвращает true:

var object = { 'a': { 'b': 2 } };

_.has(object, 'a');
// => true

_.has(object, 'a.b');
// => true

_.has(object, ['a', 'b']);
// => true

Есть ли более элегантный способ проверки ключейв моем объекте или я должен просто оставить свое решение таким, какое оно есть: has(values, 'page') && has(values, 'length')?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Вы можете использовать _.at() для извлечения значений из объекта, а затем сравнить длину результата с исходным количеством ключей:

var values = {page: "0", length: "12"}

const hasKeys = (obj, keys) => _.eq(_.at(obj, keys).length, keys.length);

console.log(hasKeys(values, ['page', 'length']));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
0 голосов
/ 22 октября 2018

_.has(object, path) <- вы читали слово путь?в основном, lodash будет проходить через объект, используя этот путь.

Я думаю, вы можете использовать ванильный JavaScript для этого:

let values = { page: "0", length: "12" },
    keys = Object.keys(values),
    result = ['page', 'length'].every(k => keys.includes(k));
    
console.log(result);

Использование lodash :

let values = { page: "0", length: "12" },
    keys = _.keys(values),
    result = _.every(['page', 'length'], k => _.includes(keys, k));
        
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
...