我正在尝试初始化一个布尔值数组,其中数组中特定位置的值不同。
如果我这样初始化状态,则为空。
state = {
activeItems: [...new Array(5)].map((item, idx) =>
idx === 1 ? true : false
)
}
答案 0 :(得分:2)
在映射数组之前,您必须先fill
个数组:
state = {
activeItems: new Array(5).fill().map((item, idx) => idx === 1)
}
const result = new Array(5).fill().map((item, idx) => idx === 1)
console.log(result)
也可以将idx === 1 ? true : false
简化为idx === 1
,并且不需要解构数组。
答案 1 :(得分:1)
Array from为您提供了<empty slots>
问题是因为map
没有迭代over empty spaces
let arr = new Array(5)
let modified = arr.map((e,i)=> console.log(i)) // prints nothing
console.log('modifed prints nothing')
使用填充填充空状态
let arr = new Array(5)
let modified = arr.fill(0).map((e,i)=> console.log(i)) //prints index
答案 2 :(得分:1)
我不确定为什么您提到您的代码返回空数组。因为,它确实返回了预期的输出。
您可以使用Array.from
来避免当前出现的任何不一致之处:
const state = {
activeItems: Array.from({length:5}, (_, idx) => idx === 1)
}
console.log(state)
Array.from
的第二个参数是map
函数。
答案 3 :(得分:1)
该代码可在本机ES6中直接使用:
[...new Array(5)].map((item, idx) =>
idx === 1 ? true : false
)
结果
[false,true,false,false,false]
数组。
与它的任何不一致都是由使用的编译器及其对...
数组扩展语法的实现引起的。在某些实现中,这可能会导致代码不兼容,尤其是禁用了downlevelIteration
编译器选项的TypeScript。例如,它在Stackblitz中甚至在JS项目中都曾经使用过。如果没有下层迭代,它将被转换为:
new Array(5).slice().map(function (item, idx) {
return idx === 1 ? true : false;
});
new Array(5).slice()
导致 sparse 数组,该数组不会用map
进行迭代。可以通过使用Array.from
或Array.fill
来确保这种情况(如其他答案已建议的那样)。两者都将用undefined
可以填充的map
值填充稀疏数组:
Array.from(new Array(5)).map((item, idx) => idx === 1);
new Array(5).fill().map((item, idx) => idx === 1);