При создании собственного массива JSON, как ограничить его до 10 самых последних - PullRequest
2 голосов
/ 05 июля 2010

Я создаю массив JSON в точности следующим образом (бар, используя математический случай).

Например:

var numbers = [];
var jsonString = "";

function EveryOneSec() {
  numbers.push(Math.random());
  jsonString = JSON.stringify({'numbers': numbers});
  setTimeout(EveryOneSec, 1000);
}

Когда я создаю строку JSON, она, очевидно, будет продолжать увеличиваться,

Есть ли способ, которым я могу добавить только 10 самых последних добавленных в массив?

Ответы [ 3 ]

6 голосов
/ 05 июля 2010

Добавьте следующий код в начало EveryOneSec

if (numbers.length == 10) {
    numbers.shift();
}

Вы хотите использовать push и shift, чтобы всегда иметь недавний 10.

3 голосов
/ 05 июля 2010

Будет несколько способов справиться с этим, но вот один (Комментарии добавлены):

Примечание Я очень буквально принял вопрос ОП. Это позволяет массиву чисел продолжать расти, но ограничивает версию JSON только 10 элементами.

var numbers = [];
var jsonString = "";

function EveryOneSec() {
  numbers.push(Math.random());
  // Get total number, minus 10 to get starting index
  var l = numbers.length - 10;

  // If l < 10 there are less than ten items, pass 0 to slice.
  // otherwise pass the starting index to get the last 10 numbers
  jsonString = JSON.stringify({'numbers': numbers.slice(l < 0 ? 0 : l)});
  setTimeout(EveryOneSec, 1000);
}
0 голосов
/ 05 июля 2010

Вы можете обойтись без проблемы проверки, равен ли размер десяти, используя

var number = Array(10);

Два недостатка: вам нужно хранить промежуточную сумму индекса i++ вместо использования numbers.push, а строка JSON будет содержать пробелы. Однако, если я правильно помню, numbers[numbers.length] = должен быть быстрее, чем numbers.push(). Так что отслеживание вашего индекса может быть быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...