我想创建一个这样的数组。
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;
答案 0 :(得分:2)
numberList = numberList.toString();
将整个数组转换为字符串。然后使用itemList: [numberList]
创建一个包含字符串作为一个元素的新数组。
要修复它:
toString()
而不是实际值
阵列。 itemList: [numberList]
移除括号。它
应改为itemList: numberList
。
var numberList = [];
for (let i = 1; i < 8; i++){
numberList.push(i.toString());
}
console.log(numberList);
&#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();
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;
答案 3 :(得分:0)
有一种方法可以使用new Array
和map
上的点差将其转换为值:
/**
* 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;