Как искать объект, который содержит данную строку в своем ключе, не используя цикл? - PullRequest
0 голосов
/ 26 сентября 2019

Как мне искать объект по ключу, содержащему данную строку, без использования цикла?

Вот пример моего объекта

let item = {
  ItemID: 1,
  ItemName: "Box",
  ItemMinHeight: 10,
  ItemMaxHeight: 30,
  ItemMinDepth: 11,
  ItemMaxDepth: 18,
  ItemMinWidth: 20,
  ItemMaxWidth: 50  
};

Мне нужно получитьпары ключ-значение, которые будут содержать «Depth», поэтому он должен возвращать ItemMinDepth и ItemMaxDepth

Ответы [ 3 ]

3 голосов
/ 26 сентября 2019

Вы можете использовать фильтр:

const listOfDepthKeys = Object.keys(item).filter(key => key.includes('Depth'));

Обратите внимание, что по-прежнему используется цикл, поскольку filter является внутренним циклом;он ничем не отличается от цикла for, за исключением того, что вы не тот, кто пишет for:)

Если вы тоже хотите значения:

const list = Object.entries(item).filter(entry => entry[0].includes('Depth'));
const pairs = Object.fromEntries(list);
0 голосов
/ 26 сентября 2019

Вы можете использовать lodash

let items = {
  ItemID: 1,
  ItemName: "Box",
  ItemMinHeight: 10,
  ItemMaxHeight: 30,
  ItemMinDepth: 11,
  ItemMaxDepth: 18,
  ItemMinWidth: 20,
  ItemMaxWidth: 50  
};

Использовать метод ключей lodash

const depthItems = {}
_.keys(items).map(key => {
  if(key.indexOf("Depth") !== -1) {
    depthItems[key] = items[key]
  }
})
console.log(depthItems)
0 голосов
/ 26 сентября 2019

Используя lodash/fp (полнофункциональный вариант Lodash), вы можете достичь этого следующим образом:

_.flow([
  _.toPairs,
  _.filter(([key, value]) => key.includes('Depth')),
  _.fromPairs
  ])(item)

Lodash fp полностью построен на функции _.curry, которая позволяет создавать промежуточные функциидо тех пор, пока вы не предоставили все необходимые параметры._.flow позволяет изящно объединять функции и прекрасно сочетается с функциями карри.

Вот документ этой библиотеки https://gist.github.com/jfmengels/6b973b69c491375117dc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...