[英]How to initialise an array in a for-loop?
我想創建一個像這樣的數組。
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] }; }
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);
在代碼中發生的是構造數組:
[1,2,3,4,5,6,7]
然后調用toString
。 在數組上調用toString
會將整個數組轉換為字符串,而不是將數組的每個元素轉換為字符串。 因此,當您在1-> 8上迭代時,您想在每個元素上調用String
構造函數。固定代碼如下所示。
注:不知道這部分的最終目標是,但可能也想改變selectedItem
在this.state
2 - >“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 }; } }
//以下內容會將整個數組轉換為字符串,請避免// // 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 }; }
有一種方法可以使用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));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.