簡體   English   中英

Ramda:通過嵌套鍵值查找 object 鍵

[英]Ramda: find object key by nested key value

ramda 中是否有任何 function 如何通過嵌套鍵值找到鍵? 我找到了一種如何在數組中找到 object 的方法,但這無濟於事。 我需要這樣的東西:

const obj = {
  addCompany: {
    mutationId: '1'
  },
  addUser: {
    mutationId: '2'
  },
  addCompany: {
    mutationId: '3'
  }
}
const findByMutationId = R.???
findByMutationId('2', obj) // returns addUser

find結合propEqkeys應該工作

 const obj = { addCompany: { mutationId: '1' }, addUser: { mutationId: '2' }, addCompany2: { mutationId: '3' } } const findByMutationId = id => obj => R.find( Ro(R.propEq('mutationId', id), R.flip(R.prop)(obj)), R.keys(obj) ) console.log(findByMutationId('2')(obj)) 
 <script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.24.1/ramda.min.js"></script> 

Pointfree 版本的lulz

 const obj = { addUser: { mutationId: '2' }, addCompany: { mutationId: '3' } } const findByMutationId = R.compose( Ro(R.head), Ro(R.__, R.toPairs), R.find, Ro(R.__, R.nth(1)), R.propEq('mutationId') ) console.log(findByMutationId('2')(obj)) const findByMutationId2 = R.compose( R.ap(R.__, R.keys), Ro(R.find), Ro(R.__, R.flip(R.prop)), Ro, R.propEq('mutationId') ) console.log(findByMutationId2('3')(obj)) 
 <script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.24.1/ramda.min.js"></script> 

不確定ramda,但如果普通js中的單線程對你有好處,以下內容將起作用

 const obj = { addCompany: { mutationId: '1' }, addUser: { mutationId: '2' } }; let found = Object.keys(obj).find(e => obj[e].mutationId === '2'); console.log(found); 

如果您使用了這個,那么您可能需要填充條目,如果您需要密鑰和值,這是很好的

 const obj = { addCompany: { mutationId: '1' }, addUser: { mutationId: '2' }, addCompany: { mutationId: '3' } } let [key, val] = Object.entries(obj).find(obj => obj[1].mutationId == '2') console.log(key) console.log(val) 

聚會有點晚了,但遲到總比沒有好。 如果你想讓它們在未來更可組合,你也可以將一些函數包裝在curry()中。

const obj = {
  addCompany: {
    mutationId: '1'
  },
  addUser: {
    mutationId: '2'
  },
  addCompany: {
    mutationId: '3'
  }
}

// search key in obj, where a value satisfies pred
const findObjKey = pred =>
  pipe(
    toPairs,
    find(compose(pred, nth(1))),
    nth(0)
  )

const findByMutationId = (id, obj) => findObjKey(propEq('mutationId', id))(obj)

const res = findByMutationId('2', obj)
console.log(res)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM