我试图使用map生成一些随机数据.令我惊讶的是,我无法弄清楚为什么这段代码不起作用.
请考虑以下代码段,它按预期工作:
const empty = [undefined, undefined];
const rand = empty.map(item => Math.random());
Output: [0.4774752874308936, 0.8482276976659398]
Run Code Online (Sandbox Code Playgroud)
我试图简化一下并执行以下操作
const rand = Array(2).map(item => Math.random())
Output: [undefined × 2]
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会这样.显然,由Array(n)和[]生成的两个数组都是典型的数组,并且具有所有原型方法.
Array(2) instanceof Array
true
[undefined, undefined] instanceof Array
true
Array.isArray(Array(2))
true
Array.isArray([undefined, undefined])
true
Run Code Online (Sandbox Code Playgroud)
有人能指出我在哪里错了吗?
我一直在努力学习如何更好地构建我的Redux商店,并偶然发现Dan的这一课.
https://egghead.io/lessons/javascript-redux-normalizing-the-state-shape#/guidelinesModal
虽然我理解如何以这种方式规范化我的数据,但我不明白它背后的动机.特别是,我有两个问题.
为什么简单的数组不够用?Dan提到 - "在复杂的应用程序中,我们可能有不止一个阵列,并且在不同阵列中具有相同ID的待机可能会失去同步".我不明白这个,我可以举一个例子吗?我在使用对象时看到的唯一好处是提高了效率,因为我们不需要映射整个数组,以防我想将某个待办事项委托给另一个reducer.
为什么我们需要维护allIds列表?当我们可以轻松地映射所有待办事项列表并获取它时,为什么要保持这种额外状态?
我知道normalizr会为我们做这件事,但为什么我们首先应该正常化呢?即使响应没有深度嵌套,标准化也有意义吗?
编辑1:
感谢您的回答,克里斯托弗.
让我们假设您的状态树看起来像这样
{
user: {
byId: {
1: {
id: 1,
name: 'Buy stuff'
},
2: {
id: 2,
name: 'Yeah'
}
}
},
allIds: [1, 2],
subscribedIds: [5],
}
department: {
byId: {
5: {
id: 5,
name: 'Sell Stuff'
}
},
allIds: [5],
subscribedIds: []
}
}
Run Code Online (Sandbox Code Playgroud)
我没有看到在这里有一个对象代替数组的好处.我也可以选择能够从部门获取ID订阅的待办事项,即使它是一个数组.看来我对这个概念的理解有点不足.你能详细说明吗?
我正在努力处理我正在尝试编写的棘手的SQL查询.看看下表:
+---+---+
| A | B |
+---+---+
| 1 | 2 |
| 1 | 3 |
| 2 | 2 |
| 2 | 3 |
| 2 | 4 |
| 3 | 2 |
| 3 | 3 |
| 4 | 2 |
| 4 | 3 |
| 4 | 4 |
+---+---+
Run Code Online (Sandbox Code Playgroud)
现在,从这个表中,我基本上想要一个包含完全相同的B组的所有As的列表,并为每个集合提供递增ID.
因此,上述输出设置为:
+---+----+
| A | ID |
+---+----+
| 1 | 1 |
| 3 | 1 |
| 2 …Run Code Online (Sandbox Code Playgroud)