Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象数组与嵌套对象?_Javascript_Arrays_Object - Fatal编程技术网

Javascript 对象数组与嵌套对象?

Javascript 对象数组与嵌套对象?,javascript,arrays,object,Javascript,Arrays,Object,我有一个非常基本的编程问题,我希望你能解释一下 我现在正在处理很多对象,我想知道搜索对象数组中的内容还是嵌套对象中的内容更好 例如,我可以通过以下两种方式存储相同的数据样本: data1 = [ { "id":1, "key1: "value1", "key2:"value2"}, { "id":2, "key1: "value1", "key2:"value2"}, { "id":3, "key1: "value1", "key2:"value2"}, { "id":4, "key1: "v

我有一个非常基本的编程问题,我希望你能解释一下

我现在正在处理很多对象,我想知道搜索对象数组中的内容还是嵌套对象中的内容更好

例如,我可以通过以下两种方式存储相同的数据样本:

data1 = [ 
{ "id":1, "key1: "value1", "key2:"value2"},
{ "id":2, "key1: "value1", "key2:"value2"},
{ "id":3, "key1: "value1", "key2:"value2"},
{ "id":4, "key1: "value1", "key2:"value2"},
.....
]

现在的要求是从子对象获取特定属性。我们只知道与之相关联的id(而不是索引)

如果要使用数组方法,则必须使用循环和数组过滤器来访问各个对象中的任何内容/值。这个方法看起来相当麻烦,遍历每个子对象对我来说效率很低。然而,每当我看到有经验的程序员正在实现类似的数据示例时,它们似乎都在大量使用数组

如果我要使用嵌套对象方法,我所要做的就是调用
data2.id\u 2.key2
来获取特定的值


推荐的做事方式是什么?我将使用相当大的数据集,因此,option将具有更好的性能?

这是一个没有错误答案的问题。这两种情况都很好。视情况而定。你应该考虑一下语义。您是返回元素数组(即用户列表等)还是只返回包含大量属性的对象?我想这种结构应该取决于数据。 但是请记住,通过property
object.property
进行访问比通过
array[index]

了解对象和数组以及何时使用它们要快
  • 什么是对象,它们与Javascript中的数组有什么不同
  • 什么时候使用一个比另一个有利
数组: 数组附带了几个非常有用的本机方法。我们可以使用push()向现有数组实例添加新元素,并通过pop()从数组中删除最后一个元素。我们还可以使用splice()删除n个元素和/或在索引i处插入新元素

对象: 将对象视为关联数组,即键->值对列表。 这些键称为对象属性

检查属性或值是否存在 数组: 通常,在处理数组时,我们不太关心索引,而更关心值。 我们对数组执行的常见操作之一是检查数组中是否存在某个值。 这可以使用indexOf()方法轻松完成

对象: 与数组不同,我们通常想知道对象是否包含某个属性。通常,我们将编写一个函数,将对象作为参数,并期望它包含一组特定的属性。这个对象可以来自API或其他代码,我们不应该依赖它拥有我们所期望的所有属性。在访问该属性后面的值之前,最好先检查该属性是否存在。对象带有hasOwnProperty()方法,它允许我们这样做


当然,通过属性键访问要快得多。但是对代码进行基准测试很容易,你应该这样做。如果你需要对这些数据进行排序,你应该使用数组。否则,如果您需要访问单个项目,并且您拥有密钥而不需要在结构中搜索它,则使用object Way,然后使用哈希。结构如此之小,任何性能差异都可能微不足道。
data2.id2.key2
会因您发布的对象而失败(顺便说一句;)为了公平起见,您可以执行
data1[1].key2
,然后呢?这是一个真正的问题,也就是说,我不是说这就是解决方案;)谢谢在这种情况下,我似乎应该使用object.property。我现在不会将你的答案标记为最终答案,以防其他人想参与进来。我还应该注意到,大约90%的情况下,使用哪种结构并不重要(从性能角度来看),因为任何应用程序中都有很多其他位置,只要将访问类型更改为属性,就可以有效地提高性能。有趣的是,我猜它们的速度一样快。有消息来源支持吗?@EmilLundberg你可以在jsperf.com上做一个小测试并检查一下。
data2 = {
"id_1": { "key1: "value1", "key2:"value2"},
"id_2": { "key1: "value1", "key2:"value2"},
"id_3": { "key1: "value1", "key2:"value2"},
"id_4": { "key1: "value1", "key2:"value2"},
.....
}