返回带有函数的对象

时间:2016-09-10 08:12:24

标签: javascript reactjs

我想在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}

任何建议为什么我得到整个阵列而不是对象?

3 个答案:

答案 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"))

JSFIDDLE

答案 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))