您何时决定将一系列对象存储在一个数组中,而不是将对象存储在一个对象中?
对象数组
[ {id:100, score:13}, {id:101, score:666} ]
对象对象
{ 100:{id:100, score:13}, 101:{id:101, score:666} }
答案 0 :(得分:1)
基本上你的问题是什么时候将数据存储为元组(数组中的对象)以及何时将数据存储为hashMap(对象的对象)
当你有很多随机密钥查找时,hashMap应该是首选的,因为你不必遍历数组中的所有记录来查找给定的密钥。
当您对数据进行一些分析时,例如根据对象中的某个键对数据进行排序,那么应该首选对象数组。
答案 1 :(得分:1)
这取决于您希望如何使用它们。例如,在这种情况下,您可以使用其中之一。该数组确实看起来像
[ {id:100, score:13}, {id:101, score:666} ]
但是对象的对象可以设计为键值对。所以,改为:
{ 100:{score:13}, 101:{score:666} }
然后,如果您知道score
,则可以直接访问id
值,而无需检查indexof
或浏览整个数组/对象。
通过两个结构循环也会略有不同。对于对象数组,您可以使用forEach
(或for
循环0
到array.length
),对于您使用的对象对象{{1} }(或Object.keys
循环)。它也归结为特定的场景,你应该愿意使用它们(我个人更喜欢对象的对象)。
答案 2 :(得分:0)
部分原因与您以后如何访问,选择或缓存特定对象有关。
var arr = [ {id: 100, score: 13}, {id:101, score:666} ];
console.log(arr[0]); //Object {id:100... etc.
“对象数组”的方式可以让你更难以弄清楚你想以哪种方式访问一个元素,比如说,它是'id'属性(如果有更简单的方法,有人会请赐教):
function fn() {
var myObj;
arr.forEach(function(el,i,arr){
if(arr[i].hasOwnProperty('id')) {
if(arr[i].id == 100) {
myObj = arr[i]; //myObj = {id:100, score:13}
}
}
});
//do something with myObj
}
对于对象的对象,如果您知道您正在尝试选择“id”属性为100的对象:
var someObj = { 100:{id:100, score:13}, 101:{id:101, score:666} };
function fn() {
var myObj;
myObj = someObj[100]; //myObj = {id: 100, score:13}
//do something with myObj
}
答案 3 :(得分:0)
答案取决于
为哈希映射和数组提供的API和工具的区别。
在这里,对于Javascript,要求很重要,例如
以下是有关数据结构哈希映射和数组的一些事实,
对于API和工具,一般来说这里没有太大的区别,因为你可以为两者编写代码,但是,
Javascript为数组提供了更多元素操作API,例如:
从所有对象中过滤掉一些对象,您可以使用Array.filter非常轻松地对阵列中的所有对象使用过滤器
您还可以使用Array.map非常轻松地使用Array.map将当前地图映射到另一个地图
您可以在这里参考更多与数组相关的API,https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array
对于object(哈希映射),提供的大多数API javascript都与Object操作有关,而不是包含的元素,通过你可以得到所有包含的对象,然后对它们执行操作,但事实并非如此作为数组的连词,请参阅此处了解详情,https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object