这是个小问题,但很奇怪!
let checkedlistarr = new Array();
for (var i in items){ //items size is 30
checkedlistarr.push(i)
}
const [selected, setSelected] = React.useState(checkedlistarr);
console.log(selected)
它返回[]
但是
checkedlistarr = ["0","1","2","3"];
const [selected, setSelected] = React.useState(checkedlistarr);
console.log(selected)
它返回["0","1","2","3"]
为什么会这样?我也尝试了concat函数。但同样的问题。
答案 0 :(得分:1)
我确信代码没有问题。 之所以返回空数组,是因为处理时间。
console.log(selected);
此行将在循环操作之前处理。
答案 1 :(得分:1)
可能有一个小误会。我相信 items
必须为空或没有可迭代的属性。
从文档 for-in 开始,迭代所有可枚举的属性。
例如:如果 items
是数字/布尔值(having not Iterable values
),for-in
循环甚至不会执行。
const items = 30
for(var i in items) {
console.log("this won't run") // Because `Object.getOwnPropertyDescriptors(items)` returns empty `{}`
}
如果 items 具有 Iterable 属性,则 for..in
循环会正确执行。意思
const items = new Array(30).fill(1) // fill some values or any object with values { 0: 0, 1: 1, 2: 2... }
for(var i in items) {
console.log("this will run", i) // Because `Object.getOwnPropertyDescriptors(items)` returns empty `{0, {...}, 1: {...},2...}`
}
您可以在代码中看到 here demo。
答案 2 :(得分:0)
这是我的答案。 上面的代码是正确的。 我使用循环指令多次尝试了上述代码模块。 结果,console.log(selected)的工作速度比for循环快。 所以我避免这种情况。 谢谢。