简单的问题,哪个更好?请用1-2句话解释原因。我很少使用JSON文件,但我认为将来我会更经常使用。所以最好从合适的结构开始,而不是花了一段时间才意识到另一种结构会更好。
"id"关键:
{
"0": {
"name": "name1",
"bdate": "bdate1",
"mail": "mail1",
"sex": "sex1"
},
"1": {
"name": "name2",
"bdate": "bdate2",
"mail": "mail2",
"sex": "sex2"
},
"2": {
"name": "name3",
"bdate": "bdate3",
"mail": "mail3",
"sex": "sex3"
}
}
"id"在数据:
[
{
"id":"0",
"name": "name1",
"bdate": "bdate1",
"mail": "mail1",
"sex": "sex1"
},
{
"id":"1",
"name": "name2",
"bdate": "bdate2",
"mail": "mail2",
"sex": "sex2"
},
{
"id":"2",
"name": "name3",
"bdate": "bdate3",
"mail": "mail3",
"sex": "sex3"
}
]
如果有需要提前查找的ID,那么使用ID索引的对象将使查找对象变得更容易。这样,使用第一种方法就可以像下面这样轻松地找到对象:
const personObj = allObjects[id]
如果使用数组,则必须遍历整个数组才能找到它:
const personObj = allObjects.find(
obj => obj.id === id
);
,这是一个数量级慢(虽然,这只在数据量相当大的情况下相关)。
当然,要确保一个ID唯一地标识一个对象,而且只有一个对象。
如果id恰好与它们在数组中的位置完全对应—就像这个例子中一样—您可以使用数组并使用allObjects[id]
—但这可能会在以后添加或从数组中删除项时产生问题。
如果您需要根据id查找用户,那么使用地图肯定会更快。在大多数情况下,您将使用键查找值,映射将是提供最佳性能和最直接编码的选择。
如果你总是需要获得每个用户,那么列表可能更方便,但是当你需要的时候,很容易将映射转换为列表。
大多数语言都有简单的语法,允许您从映射创建列表,反之亦然。转换成本基本相同。
不要忘记列表包含了额外的信息。这个顺序在地图上是没有的。所以如果秩序很重要…例如,在队列或类似的项目中,则选择使用列表。