如何将这些数据映射到React中的json数组?

时间:2017-06-29 23:02:15

标签: javascript json reactjs react-select

我有一个Rest API,它以以下形式返回数据:

["1.6.3","1.6.4","1.6.5","1.6.6","1.7.0","1.7.2"]

我需要这种格式的数据:

var options = [{ value: 'one', label: 'One' }, { value: 'two', label: 'Two', clearableValue: false }
 ];

获取数据后,我使用以下代码以所需格式映射数据:

if (this.state.coreversions) {
                var options = [
                    this.state.coreversions.map(versions =>
                        `{ value: '${versions}', label: '${versions}' },`
                    )
                ];
            }

此处变量版本等于Rest API返回的数据的单个值

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:2)

Array#map返回一个数组,因此您不必将其括在方括号内。

修改您的代码如下:

if (this.state.coreversions) {
  var options = this.state.coreversions.map(
    versions => ({value: versions, label: versions})
  );
}

// simplified this.state.coreversions to just coreversions
// only for the purposes of this snippet
var coreversions = ["1.6.3","1.6.4","1.6.5","1.6.6","1.7.0","1.7.2"];

if (coreversions) {
  var options = coreversions.map(
    versions => ({value: versions, label: versions})
  );
}

console.log(options);

// logs out an array of objects:
//  [
//    { value: '1.6.3', label: '1.6.3' },
//    { value: '1.6.4', label: '1.6.4' },
//    { value: '1.6.5', label: '1.6.5' },
//    { value: '1.6.6', label: '1.6.6' },
//    { value: '1.7.0', label: '1.7.0' },
//    { value: '1.7.2', label: '1.7.2' }
//  ] 

答案 1 :(得分:0)

我认为你的map函数正在返回一个字符串数组而不是对象。应该像:

return {value:'$ {versions}',label:'$ {versions}'}

注意上面没有围绕整行的刻度。

答案 2 :(得分:0)

React-Select需要一个对象数组,而不是一个字符串数组。

您可以遍历数据,将这些值放在一个对象中,然后将其推送到如下所示的数组中:

var results = ["1.6.3", "1.6.4", "1.6.5", "1.6.6", "1.7.0", "1.7.2"];

var selectData= [];

for (result of results) {
  selectData.push({
    value: result,
    label: result
  });
}

console.log(selectData);