为什么切片返回一个空数组?
2020-09-19
1503
我有一组布尔值。
const [locks, setLock] = useState([false, false, false, false]);
目标: 我试图通过对旧锁数组进行切片来更改基于索引的值。
问题:
如果值为 1,则数组的最后一部分 (
locks.slice(value + 1)
) 将返回为空。
切片不应该将数组中选定的元素作为新数组对象返回吗,这样就不会更改锁数组?
function handleLock(event) {
const {value} = event.currentTarget;
const oldLock = locks[value]
console.log(oldLock)
const newLocks = locks.slice(0, value).concat([!oldLock]).concat(locks.slice(value + 1));
setLock(newLocks)
}
已分解
function handleLock(event) {
const {value} = event.currentTarget;
const oldLock = locks[value]
console.log(oldLock)
const locks1 = locks.slice(0, value)
const locks2 = locks.slice(value+1)
console.log(locks2)
const newLocks = locks1.concat([!oldLock]).concat(locks2);
setLock(newLocks)
}
问题: 是什么导致了此问题?我该如何解决?
1个回答
我的猜测是,
event.target.value
可能返回
string
而不是
number
。这将导致切片值为空数组,因为将字符串添加到数字会导致连接,而不是相加。
尝试使用
const value = parseInt(event.target.value, 10);
建议使用扩展语法复制数组,然后分配值。这应该使代码更易读且更简单
const newLocks = [...oldLocks];
newLocks[value] = !newLocks[value];
setLock(newLocks);
Hassan Naqvi
2020-09-19