在React中将prop项目映射到数组中

时间:2019-03-07 03:17:56

标签: javascript reactjs

我有一个数组,我想在其中循环遍历每个元素,并从传递给组件的props中找到它的值。

array = ['a','b','c']

我想将'this.props.a'的值保存到变量'a;同样,对于考虑到props的其他变量,确实保存了值,我该怎么做呢?

示例代码:

buildURL() {
    const param_array=array = ['a','b','c']
    const param_values=[];
    let queryStringUrl = window.location.href.split('?')[0];
    param_array.map((param)=>{
      param_values.push(encodeURIComponent(this.props.param)) 
    })

在这里,我需要this.props.search_item,this.props.search_type,this.props.article_quality和this.props.min_views。

我该怎么办?

2 个答案:

答案 0 :(得分:2)

当前,您的代码在地图的每次迭代中寻找this.props.param。请注意,这并不意味着它在props中寻找等于变量param的键,而是在props中寻找称为"param"的键(等效于this.props["param"]

要将变量用作对象中的键,您需要使用方括号表示法:this.props[param]

在您的代码中:

buildURL() {
    const param_array=['search_term','search_type','article_quality','min_views'];
    const param_values=[];
    let queryStringUrl = window.location.href.split('?')[0];
    param_array.map((param)=>{
      paramValue = this.props[param];
      param_values.push(encodeURIComponent(paramValue)) 
    })
}

修改

要存储每个键的记录,param_array中这些键的值对以及this.props中的值,您可以按以下方式创建新对象:

buildURL() {
    const paramArray=['search_term','search_type','article_quality','min_views'];
    const paramObject = {};
    for (const param of paramArray) {
        paramObject[param] = this.props[param];
    }
    // ...
}

基本上,创建一个新的空对象(paramObject),然后循环遍历param中的每个paramArray,并在新对象中为该参数赋值等于this.props中的那个参数。最终对象将具有paramArray中每个参数的键和来自this.props的值。

答案 1 :(得分:1)

您可以尝试object[property]

param_array.map((param)=>{
   param_values.push(encodeURIComponent(this.props[param])) 
})

更新: 如果要将它们存储到变量中,可以使用reduce

buildURL() {
    const param_array=['search_term','search_type','article_quality','min_views'];
    let queryStringUrl = window.location.href.split('?')[0];
    const param_values = param_array.reduce((acc, param)=>{
      acc[param]= encodeURIComponent(this.props[param])
      return acc;
    }, {})
    return param_values
}

现在您的param_values是具有以下格式的对象

//param_values
{
  search_term: /*encoded str*/,
  search_type: /*encoded str*/,
  ...
}

您可以轻松访问它。