我已经多次看到人们在谈论O(1)
,O(n)
等问题,但是没人知道它的含义和作用方式。我尝试在线搜索它,但不知道要使用哪些关键字。
这些是什么意思,以及如何应用于情况?
请考虑本问题的实质,使用这两个简单的示例以及我的问题。
宾语:
每个级别向内的时间/表演差异?
我的概念中.object
与['object']
之间的区别
题?pets.dogs
或pets['dogs']
pets.dogs.collie
或pets['dogs']['collie']
pets.dogs.collie.size
或pets['dogs']['collie']['size']
数组如何影响这一堆(如果我知道密钥)?pets.dogs.collie.color[2]
和pets.dogs.collie.popularnames[56]
数组如何影响这一堆(如果我不知道键,并且在for
循环中)?pets.dogs.collie.color[i]
和pets.dogs.collie.popularnames[i]
var pets = {
dogs: {
chihuahua: {
color: ["black", "white"],
size: "tiny",
hunting: false,
popularnames: [ /*100 names*/ ]
},
collie: {
color: ["brown", "white"],
size: "medium",
hunting: false,
popularnames: [ /*100 names*/ ]
},
// etc
},
cats: {
bengal: {
color: ["gray", "white"],
size: "medium",
fur: "short",
popularnames: [ /*100 names*/ ]
},
birman: {
color: ["black", "white"],
size: "medium",
fur: "long",
popularnames: [ /*100 names*/ ]
},
// etc
}
}
底线问题:
我应该避免使用复杂的对象(例如,很多选择器)并使用多个简单的选择器吗?
如果迭代对象内部的深3-4级数组,数组迭代性能会变差吗?
数组:
每个级别向内的时间/演奏差异(如果我知道按键)?
pets[0]
pets[0][1]
pets[0][1][3]
对象如何影响这堆对象(如果我知道密钥)?
pets[0][1][1]['somekey']
var myArray = [
0: [
0: [
0: [ /* 100 objects */ ],
1: [ /* 100 objects */ ],
2: [ /* 100 ints */ ],
3: [ /* 100 ints */ ]
],
1: [
0: [ /* 100 objects */ ],
1: [ /* 100 objects */ ],
2: [ /* 100 ints */ ],
3: [ /* 100 ints */ ]
],
// etc
],
1: [
0: [
0: [ /* 100 objects */ ],
1: [ /* 100 objects */ ],
2: [ /* 100 ints */ ],
3: [ /* 100 ints */ ]
],
1: [
0: [ /* 100 objects */ ],
1: [ /* 100 objects */ ],
2: [ /* 100 ints */ ],
3: [ /* 100 ints */ ]
],
// etc
]
]
底线问题:
我应该避免使用复杂的数组(例如,许多级别),而是使用多个简单的数组吗?
最佳答案
有关您对O(1),O(n)的问题的深入解释,请参见此wikipedia article on Big_O_notation。
Javascript中的数组不是关联的,因为Javascript中的所有内容都是对象。我发现Javascript Garden是良好实践的很好参考。
也许我只是懒惰,但我倾向于养成使数组尽可能“浅”的习惯。就像De La Soul关节一样,“ 3是魔幻数字”对我而言。 ;)
关于javascript - 数组和对象的复杂性以及“选择器”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34933032/