2016-09-10 155 views
0

我想用React JS中的函數返回一個對象。用函數返回一個對象

我有下面的代碼:

let filters = [ 
    {name: "PRICE_RANGE", values: [{active: "true", low: 10000, high: 21000}]} 
] 


getFilterValues(filters, filterName){ 
     return filters.filter(f => { 
      if(f.name === filterName) { 
       return {low: f.values.low, high: f.values.high}; 
      } 
     }) 
    } 



<PriceFilter values={this.getFilterValues(filters, "PRICE_RANGE")} /> 

,我得到的是

{name: "PRICE_RANGE", values: [{active: "true", low: 10000, high: 21000}]}

的結果,但我想是這樣的:

{low: 10000, high: 21000}

任何意見爲什麼我得到呃e數組返回而不是對象?

回答

1

希望這段代碼會很有用。

創建一個通用函數,它將接受您要過濾的key。 創建一個對象並用low & high填充值,如果它匹配。 返回對象。

let filters = [{ 
    name: "PRICE_RANGE", 
    values: [{ 
    active: "true", 
    low: 10000, 
    high: 21000 
    }] 
}] 

function filterMe(key){ 
var newObj={}; 
    filters.filter(function(item,index) { 
     if(item.name === key){ 
     newObj.low=item.values[0].low; 
     newObj.high=item.values[0].high 
     } 
    }) 
    return newObj; 
} 
console.log(filterMe("PRICE_RANGE")) 

JSFIDDLE

1

filter作品有點不同於你正在使用它。如果你從內部函數返回任何真實的東西,該元素被認爲是有效的。

下面是一個例子:

function isBigEnough(value) { 
    return value >= 10; 
} 
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough); 
// filtered is [12, 130, 44] 

對於你的榜樣,這意味着通過調用return {low: f.values.low, high: f.values.high};你只是告訴filterfilters當前元素是有效的,應當予以保留。

如果你只想要values成員,你可以寫類似這樣的代碼:

getFilterValues(filters, filterName){ 
    return filters.filter(f => { 
     if(f.name === filterName) { 
      return true; 
     } 
    }).map(f => { 
     return f.values; 
    }); 
} 

此代碼濾鏡數組,然後提取並返回values成員。

+0

我還沒有得到我想要的結果。 [jsfiddle](https://jsfiddle.net/o93Lm0rc/95) – Boky

+0

我試圖給出一個一般的例子。將其用於確切用例:https://jsfiddle.net/o93Lm0rc/96/ –

1

function getFilterValues(filters, filterName) { 
 
    return filters 
 
    .filter(f => f.name === filterName) // get the chosen filter 
 
    .map(f => f.values)[0] // retrieve values from the object 
 
    .map(v => ({ 
 
     low: v.low, 
 
     high: v.high 
 
    })) // get only low and high props 
 
} 
 

 
//////////// test case /////////////////////////////////////////// 
 

 
let filters = [{ 
 
    name: "PRICE_RANGE", 
 
    values: [{ 
 
    active: "true", 
 
    low: 10000, 
 
    high: 21000 
 
    }] 
 
}] 
 

 
let filtered = getFilterValues(filters, "PRICE_RANGE") 
 
document.write(JSON.stringify(filtered))