javascript对象和数组遍历的问题?
黄舟
黄舟 2017-04-11 09:46:07
0
3
595

假设有这样一些数据,包含了id和value两个值其中id是唯一的,用以下两种存储方式哪一种获取某一个id速度更快一些?

var array = [{id:'id1',value:1},{id:'id2',value:2},{id:'id3',value:3}];
var obj = {
    'id1': 1,
    'id2': 2,
    'id3': 3
};

比如我要获取id = 'id2'的value,是用obj['id2']快还是循环遍历array快?
我认为是obj['id2']比较快,不知道js中Object的实现是不是类似Java的HashMap?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

reply all(3)
小葫芦

数据结构怎么设计不能单纯由速度决定。数组存的是一类数据,虽然不是不是强制性的,但这么设计对程序的可维护性和可读性比较好。对象是把一个对象的属性放到一起,把不同对象的相同属性放到一个新对象中,这个做法没问题,但是不是特别科学,在后续开发可能产生bug,并且不好维护。

Ty80

如果单纯从获取数据的角度来说,使用json对象的方式取值效率更高;
数组方式,你需要些循环,然后得到数据。这里要涉及到的操作是js语法层面的,然后再是内核层面的。
而json对象方式,直接即可得到数据,直接触碰的是内核层面的。
虽然,内核层面的执行效率我们当做一致的话,暴漏在外层的js语法部分的执行对于效率有一定的影响。

这就好比,某一个实现,你可以用js实现,还有一个实现使用底层内核提供的方法,孰优孰劣自知。

当然,这个不是绝对的。因为内核层面的执行效率我们是未知的!

左手右手慢动作

var array = [{id:'id1',value:1},{id:'id2',value:2},{id:'id3',value:3}];
你可以把这个转一下,如果有更多属性的话

var map = {
    'id1':{id:'id1',value:1},
    'id2':{id:'id2',value:2},
    'id3':{id:'id3',value:3}
}

获取的话hash会更快一点

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template