javascript - 基于其他属性从对象数组中提取属性
问题描述
我有对象数组,并且想基于另一个对象获取一些属性
认为
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 (将不匹配)
等等 ..
所以它将返回空数组
解决方案
首先过滤到正确的 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));
推荐阅读
- python - 具有优先级的费用跟踪器
- java - 如何对具有不同子类spring数据的继承类执行dto投影?
- flutter - 更改焦点上的 suffixIcon 颜色 Flutter
- laravel - 使用带有降价的嵌套@components的Laravel Mail问题
- ubuntu - NPM 无法安装包 EHOSTUNREACH
- python - 在 python 中构建海洋建模代码
- docker - 在 docker compose 上创建持久数据
- java - mvn 插件 checkstyle 因意外令牌错误而失败
- reactjs - 在 React JS 中编辑 After Effect 文件
- laravel - 码头工人。Laravel 容器之间的通信