我想在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}
任何建议为什么我得到整个阵列而不是对象?
答案 0 :(得分:1)
希望此代码段有用。
创建一个通用函数,该函数将接受您要过滤的key
。
创建一个对象并使用low
&amp;如果匹配,则为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"))
答案 1 :(得分: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};
,您只是告诉filter
filters
中的当前元素是有效的并且应该保留。
如果您只想要values
成员,则可以编写与此类似的代码:
getFilterValues(filters, filterName){
return filters.filter(f => {
if(f.name === filterName) {
return true;
}
}).map(f => {
return f.values;
});
}
此代码过滤数组,然后提取并返回values
成员。
答案 2 :(得分: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))