Loda sh Grab ключ от вложенного свойства - PullRequest
1 голос
/ 18 апреля 2020

Я просмотрел несколько сообщений SO и запутался в функции _.findKey loDa sh.

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

Пример данных;

responderRooms = {
  MasterVal: {
    status: Value1,
    time: Value2,
    msg: Value3,
    responders: {
      4471230123456: {}
    }
  }
}

Я знаю, что такое значение 4471230123456, и пытаюсь узнать ключ MasterVal.

Обычно `_.findKey 'позволяет мне указать массив, путь и значение для поиска. Например,

 console.log( _.findKey(responderRooms, 'time', 'Value2') // Returns MasterVal

Однако, когда сопоставляемое значение является частью вложенного массива, я пытаюсь:

 var responderIndex = _.findKey(responderRooms, function(o) {
        return o.responders.tel = 4471230123456;
    });

, который возвращает правильный ключ, но добавляет еще 'tel = NewSentTo' в массиве ResponderVal. В результате:

responderRooms = {
  MasterVal: {
    status: Value1,
    time: Value2,
    msg: Value3,
    responders: {
      4471230123456: {},
      tel: 4471230123456 // << This shouldn't be here!
    }
  }
}

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

responders создается с помощью:

 objPath = MasterVal + '.responders.' + data.tel
    _.set(responderRooms, objPath, {
            name: data.name,
            type: data.type,
            msgStatus: data.msgStatus,
            location: data.location,
            jobStatus: data.jobStatus
    }); 

Спасибо, Ник

1 Ответ

0 голосов
/ 18 апреля 2020

Используйте _.has(), чтобы проверить, существует ли ключ в responders объекте:

const responderRooms = {
  DemoKey1: {},
  DemoKey2: {},
  MasterVal: {
    status: 1,
    time: 2,
    msg: 3,
    responders: {
      4471230123456: {}
    }
  }
}

const responderKey = _.findKey(responderRooms, o => 
  _.has(o.responders, 4471230123456)
)

console.log(responderKey)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>
...