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

问题描述

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

我想返回一个基于替代名称的 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