2016-09-10 107 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))