微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基于数组从对象返回值数组

如何解决基于数组从对象返回值数组

我有一个看起来像这样的对象

我想返回一个基于替代名称的 wsname 数组。例如,我提供一个数组 ["AAVEETH","AAVEXBT"] 并返回 ["AAVE/ETH","AAVE/XBT"]

我想出了如何像这样使用 lodash __.filter

 const wsnames = _.filter(
    obj,(item) => item.altname === 'AAVEETH' || item.altname === 'AAVEXBT'
  )

但这只会返回完整的对象条目。另外,我的输入数组不会事先知道。

解决方法

首先用Object.values()把对象的值变成一个值数组。现在,您可以使用 filter 之类的数组方法过滤掉不需要的值,并使用 map 创建一个只有 wsname 属性的新数组。

const wsNames = Object.values(obj)
  .filter(({ altname }) => altname === 'AAVEETH' || altname === 'AAVEXBT')
  .map(({ wsname }) => wsname);

现在您可以将此逻辑转换为一个函数,您可以在该函数中传递要从中过滤的对象以及要从中获取 altname 值的 wsname 值数组。

const getWsNames = (obj,altNames) => Object.values(obj)
  .filter(({ altname }) => altNames.includes(altname))
  .map(({ wsname }) => wsname);

const wsNames = getWsNames(obj,['AAVEETH','AAVEXBT']);
,

您可以仅使用 Object.valuesarray.filter 来实现此目的。

let arr = ["AAVEETH","AAVEXBT"]
let masterObj = [....] // your object having all data
result = []
arr.forEach(i => {
 let found =  Object.values(masterObj).filter(i => i.altname)[0]
  if(found){
    result.push(i.wsname)
  }
})

在上面的代码中,我只是在您想要获取 altname 数组的 wsname 数组上循环,并且我正在使用 object.values 来获取所有 {{1} } as values 然后我进行过滤以获取匹配 array

的匹配对象的 wsname

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。