如何在for循环中初始化数组?

时间:2018-04-28 21:44:57

标签: javascript reactjs react-native

我想创建一个这样的数组。

itemList = ['1', '2', '3', '4', '5', '6', '7']

但我的代码输出是

itemList = ['1,2,3,4,5,6,7']



var numberList = [];
export default class App extends Component<{}> {
  constructor(props) {
  super(props);
  for (let i = 1; i < 8; i++){
    numberList.push(i);
  }
  numberList = numberList.toString();
  this.state = {
    selectedItem : 2,
    itemList: [numberList]
  };
}
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:2)

numberList = numberList.toString();将整个数组转换为字符串。然后使用itemList: [numberList]创建一个包含字符串作为一个元素的新数组。

要修复它:

  • 对for循环中的每个值使用toString()而不是实际值 阵列。
  • 同时从itemList: [numberList]移除括号。它 应改为itemList: numberList

&#13;
&#13;
var numberList = [];

for (let i = 1; i < 8; i++){
  numberList.push(i.toString());
}

console.log(numberList);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您的代码中发生的是您构造数组:

[1,2,3,4,5,6,7]

然后在其上调用toString。在数组上调用toString会将整个数组转换为字符串,而不是将数组的每个元素转换为字符串。因此,当您迭代1时,您希望在每个元素上调用String构造函数 - > 8.固定代码如下所示。

注意:不确定此组件的最终目标是什么,但可能还想更改selectedItem中的this.state从2 - &gt; '2',正如我想象的那样它映射到itemList的元素,它们现在是String类型而不是Number

var numberList = [];
export default class App extends Component<{}> {
    constructor(props) {
        super(props);
        for (let i = 1; i < 8; i++){
            numberList.push(String(i));
        }
        this.state = {
            selectedItem : 2,
            itemList: numberList
        };
    }
}

答案 2 :(得分:0)

//以下将整个数组转换为字符串,避免这种情况 // numberList = numberList.toString();

&#13;
&#13;
var numberList = [];
for (let i = 1; i < 8; i++){
    numberList.push(i.toString());
  }
export default class App extends Component<{}> {
  constructor(props) {
  super(props);
  
  this.state = {
    selectedItem : 2,
    itemList: numberList
  };
}
&#13;
&#13;
&#13;

答案 3 :(得分:0)

有一种方法可以使用new Arraymap上的点差将其转换为值:

&#13;
&#13;
/**
 * Creates an array from start to end where start is a number smaller than end
 * It takes an optional parameter called step that defaults to 1
 * usage example:
 * range(5,9);// [5, 6, 7, 8, 9]
 * range(5,9,1.5);// [5, 6.5, 8]
 */
const range = (start,end,step=1)=>{
  const min = start-step
  return [...new Array(Math.floor((end-min)/step))].map(
    (val,index)=>min+(step*(index+1))
  );
};

console.log(range(5,9));
console.log(range(5,9,1.5));
&#13;
&#13;
&#13;