首页 > 解决方案 > 基于其他属性从对象数组中提取属性

问题描述

我有对象数组,并且想基于另一个对象获取一些属性

认为

var lngs = [{id : 3 , label : 'a'} , {id : 2 , label : 'b' , {id : 4 , label : 'c'}];

现在我需要根据 id 获取标签数组

例如

getAttrs([4,3]);

function getAttrs(ids , arr)
{
   // as long as ids = [4,3] , it should return
   ["c","a"]
}

我试过这个算法,但它没有按预期工作

 langsFromIds(ids)
 {
   var rslt = [];
   var lngs = this.state.langs;
   for (var i = 0 ; i < lngs.length ; i++)
   {
     if (lngs[i].id == ids[i])
     {
       rslt.push(lngs[i].label);
     }
   }

   return rslt;
 }

因为它以这种方式运行(例如)

第一次迭代 (i==0) => lngs[i].id == 3 && ids[i] == 4 (将不匹配)

第二次迭代 (i==1) => lngs[i].id == 2 && ids[i] == 3 (将不匹配)

等等 ..

所以它将返回空数组

标签: javascriptalgorithm

解决方案


首先过滤到正确的 id,然后提取所需的标签:

var lngs = [{id : 3 , label : 'a'} , {id : 2 , label : 'b'} , {id : 4 , label : 'c'}];

function langsFromIds(ids, langs)
{
  return langs.filter(lng => ids.indexOf(lng.id) > -1).map(lng => lng.label);
}

console.log(langsFromIds([4, 3], lngs));


推荐阅读