Array的实现用了三种语言:汇编,C和JS,最常用的如push用了汇编实现,比较常用的如Pop/shift/unshift/splice/等用了C,较为少用的如join/sort用了JS(使用wasm打包编译成nativecode)。

    Array为快元素即普通的数组时,增删元素操作需要不断的扩容、减容和调整元素的位置,特别是当不断地在起始位置插入元素时,和链表相比,这种时间效率还是比较低下的。如果使用的场景是要根据Index删除元素,使用Array还是有优势,但是若能很快定位到删除元素的位置,链表毫无疑问还是更合适的。

    1. 统计数组元素出现次数
    1. var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
    2. var countedNames = names.reduce(function (allNames, name) {
    3. if (name in allNames) {
    4. allNames[name]++;
    5. }
    6. else {
    7. allNames[name] = 1;
    8. }
    9. return allNames;
    10. }, {});
    11. // countedNames is:
    12. // { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }
    1. 如何实现一个range
    1. const range = (start, stop, step) => Array.from({ length: (stop - start) / step }, (_, i) => start + (i * step));
    2. // Generate numbers range 0..4
    3. range(0, 5, 1);
    4. // [0, 1, 2, 3, 4]
    5. // Generate the alphabet using Array.from making use of it being ordered as a sequence
    6. range('A'.charCodeAt(0), 'Z'.charCodeAt(0) + 1, 1).map(x => String.fromCharCode(x));
    1. 如何实现reverse
    1. function myreverse(arr){
    2. for(var i=0;i<arr.length/2;i++){
    3. vat tmp = arr[i];
    4. arr[i] = arr[arr.length - i - 1];
    5. arr[arr.length - i - 1] = tmp;
    6. }
    7. return arr;
    8. }