簡體   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