[英]How to return the matching results from Array of object based on an array of input values
[英]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.values
和array.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.