繁体   English   中英

基于数组从 object 返回值数组

[英]Return array of values from object based on array

我有一个看起来像这样的 object

我想返回一个基于 altnames 的 wsnames 数组。 例如,我提供一个数组["AAVEETH", "AAVEXBT"]并返回["AAVE/ETH", "AAVE/XBT"]

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

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

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

首先使用Object.values()将 object 的值转换为值数组。 现在,您可以使用filter之类的数组方法来过滤掉不需要的值,并map创建一个仅具有wsname属性的新数组。

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

现在,您可以将此逻辑转换为 function,在其中传递要从中过滤的 object 以及要从中获取wsname值的altname值数组。

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将所有values作为array获取,然后我正在过滤以获取匹配的 object 的 wsname具有匹配altname

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM