2017-02-17 23 views
0

Например, у меня есть объект ДорожкиКак я найти объект с конкретным свойством в пределах вложенных объектов

var Paths = { 
    path1: { 
     name: 'method1', 
     get: { 
      name: 'param1', 
      id: 1 
     }, 
     post: { 
      name: 'param2', 
      id: 2 
     } 
    }, 
    path2: { 
     name: 'method2', 
     get: { 
      name: 'param1', 
      id: 3 
     }, 
     post: { 
      name: 'param2', 
      id: 4 
     } 
    } 
}; 

Я хочу, чтобы получить объект на основе идентификатора.

Я пробовал делать это _.find(Paths, {get:{id:1}}) Но здесь id также может быть в объекте post.

Мне нужна помощь при решении этой проблемы в lodash.

+1

Какой результат вы хотите? – AshBringer

ответ

1

найти в использовании объекта _.pickBy

var res = _.pickBy(Paths, function(path) { 
    return path.get.id === 1 || path.post.id === 1; 
}); 

для неизвестный ключ

var res = _.pickBy(Paths, function(path) { 
    return _.chain(path) 
     .values() 
     .some(function(val) { 
      return _.get(val, 'id') === 1; 
     }) 
     .value(); 
}); 
+0

'_.find (Пути, {: {id: 1}})' Мне нужно что-то вроде этого. речь идет не только о получении или публикации, это может быть любой ключ. Спасибо за предложение. –

+0

@PunithMithra '_.pickBy (Paths, {get: {id: 1}})' также работает – stasovlas

+0

@PunithMithra обновляю свой ответ для неизвестного ключа – stasovlas

0

Собственно, ваш код хорош, так как он находится только внутри get, а не post. lodash также имеет matchesProperty iteratee, который в данном случае можно было бы сделать так:

_.find(Paths, ["get.id", 1]); 

Кроме того, вы можете фильтровать по пользовательские функции:

_.find(Paths, function(o) { return o.get.id == 2 || o.post.id == 2; }); 
+0

, если я ищу идентификатор «2», который не входит, но доступен в сообщении. Я должен уметь найти путь, соответствующий идентификатору. –