根据对象中其他两个属性的值获取Javascript对象属性的值

根据对象中其他两个属性的值获取Javascript对象属性的值,javascript,arrays,object,Javascript,Arrays,Object,给定下面的对象数组,如果前两个ID与传递到方法中的ID匹配,那么获取“thirdId”数组的更好方法是什么 const arrObjs= [{firstId:'1',secondId:'1',thirdId:'5'}, {firstId:'2',secondId:'1',thirdId:'12'}, {firstId:'1',secondId:'2',thirdId:'13'}, {firstId:'1',secondId:'1',thirdId:'42'}, {firstId:'1',sec

给定下面的对象数组,如果前两个ID与传递到方法中的ID匹配,那么获取“thirdId”数组的更好方法是什么

const arrObjs=
[{firstId:'1',secondId:'1',thirdId:'5'},
{firstId:'2',secondId:'1',thirdId:'12'},
{firstId:'1',secondId:'2',thirdId:'13'},
{firstId:'1',secondId:'1',thirdId:'42'},
{firstId:'1',secondId:'2',thirdId:'51'}];
const getThirdIds=(arrObjs,firstId,secondId)=>{
常数thirdIds=[]
arrObjs.map(obj=>{
if(obj.firstId==firstId&&obj.secondId==secondId){
第三推(对象第三推)
}
})
第三次返回
}

log(getThirdIds(arrObjs,1,1))我会使用过滤器然后映射,即

return arrObjs
  .filter(obj => obj.firstId == firstId && obj.secondId == secondId)
  .map(obj => obj.thirdId)
将创建一个仅包含匹配项的新数组

然后将该数组转换为仅包含每个条目的
thirdId
属性的数组


如果您不喜欢执行两组迭代(过滤和映射),可以使用一个操作

return arrObjs.reduce((/* collector */ thirdIds, /* each */ obj) => {
  if (obj.firstId == firstId && obj.secondId == secondId) {
    thirdIds.push(obj.thirdId)
  }
  return thirdIds
}, /* initial collector value */ [])
如果“更好”表示更短:

const arrObjs=
[{firstId:'1',secondId:'1',thirdId:'5'},
{firstId:'2',secondId:'1',thirdId:'12'},
{firstId:'1',secondId:'2',thirdId:'13'},
{firstId:'1',secondId:'1',thirdId:'42'},
{firstId:'1',secondId:'2',thirdId:'51'}]
const getThirdIds=(a,b,c)=>a.reduce((r,o)=>
o、 firstId==b&&o.secondId==c?r.concat(o.thirdId):r,[]
log(getThirdIds(arrObjs,1,1))