Хранение массива в памяти

258
28 июня 2018, 20:50

Как хранится массив в памяти? В си это непрерывная область памяти с доступом к любому элементу за константу. Такое ли представление массива в JavaScript?

Answer 1

Ну вообще в памяти он хранится всегда и каждый элемент имеет свой индекс

arr[i]

Но если ты хочешь переписать его, но сохранить данные (без сервера, естественно) - используй localStorage перенеся его в строку (временно)

localStorage.setItem('stringArr', stringArr);

и получить его ты сможешь в любой момент

localStorage.getItem(stringArr);

и перенести в массив по разделителю, который выбрал в начале

С сервером, конечно же проще, но тогда тебе нужны пост и гет запросы с ним. Но получать js код сложно с другого сайта, из-за корс защиты, но ее можно обойти вот так

  function req_scrpt() {
$.get(chrome.extension.getURL('/injected.js'), 
  function (data) {
    var script = document.createElement("script");
    script.setAttribute("type", "text/javascript");
    script.innerHTML = data;
    document.getElementsByTagName("head")[0].appendChild(script);
    document.getElementsByTagName("body")[0].setAttribute("onLoad", " injected_main();");
  }
);
}
function file_get_contents(url) {
  console.log(url);
  var req = null;
  try {
    req = new XMLHttpRequest();
  } catch (e) {}
  if (req == null) throw new Error('XMLHttpRequest not supported');
  req.open("GET", url, false);
  req.send(null);
  return req.responseText;
 }
}

Так что сам выбирай что тебе удобнее и что из этого нужно (т.к. не совсем понял вопрос - ответил сразу на все, которые на мой взгляд связаны с ним)

Answer 2

В JavaScript массивы представляют собой типы объектов, со специальными конструкторами и методами доступа и выделяют непрерывный блок памяти фиксированной длины:

var array = new Array(100);

Данный массив не выделит никакой памяти, он просто установит значение свойства length. Когда вы создаете массив, вам не нужно объявлять размер по мере его роста.
Массивы в JavaScript разрежены - это означает, что не все элементы в массиве могут содержать данные, существуют только те элементы, которые содержат фактические данные - это уменьшает объем памяти, используемой массивом.

Если создать пустой массив:

var array = [];

И заполнить его от 0 до 99 таким образом:

array[0] = 0;
array[99] = 100;

Длина будет равна 100, но количество элементов в массиве будет равно 2.

Если вы хотите использовать JavaScript-Arrays как непрерывные блоки памяти, вы должны изучить TypedArray - это позволит выделять блок памяти в виде байтового массива и более эффективно обращаться к исходным двоичным данным.

READ ALSO
Возврат пустой строки вместо ошибки в шаблонных строках?

Возврат пустой строки вместо ошибки в шаблонных строках?

Когда прописываю выборку данных из массива который например пустой то возникает ошибкаTypeError: Cannot read property text

266
Ошибка - Uncaught TypeError: Cannot read property 'options' of null

Ошибка - Uncaught TypeError: Cannot read property 'options' of null

пытаюсь значение select поместить в переменную, но мне выдает ошибку- Uncaught TypeError: Cannot read property 'options' of null, код html:

258
Найти все делители каждого числа в массиве

Найти все делители каждого числа в массиве

Есть массив чисел от 201 до 499, и нужно для каждого из этих чисел найти сумму всех его делителейя пытался записать ее как то так, но ничего не вышло,...

280
Не могу записать в состояние значение перед рендерингом React

Не могу записать в состояние значение перед рендерингом React

Хочу из props match получить название страницы, вот ниже попытка при запуске реакта, при этом в консоле не показывает thisprops

264