Неожиданное поведение при добавлении объектов в списки Javascript - PullRequest
0 голосов
/ 01 марта 2020

Работая с последней версией Google chrome, я запускаю следующий код:

(data) => {  //data is a list of json tuples that look like [{x: __, y: ___}, ...]
    var rand = () => Math.random() * data.length;

    const placeholder = [...Array(10).keys()].map(_ => {
      const idx = Math.floor(rand());
      return data[idx];
    });
};

Я ожидаю, что эта функция сделает выборку из 10 поднаборов входных данных и вернет их в тот же формат. На каждой итерации в функции map я распечатываю объект, и он выглядит как положено (см. Изображение). Странно то, что тогда результат, который я вижу в массиве "placeholder", имеет каждый ключ Release_Date, имеющий то же значение, что и placeholder [0] ['Release_Date'], когда каждый из них должен иметь уникальные значения. Production_Budget выглядит хорошо. Я не знаю, что здесь происходит, и я в тупике. Кто-нибудь знает, что происходит?

enter image description here

1 Ответ

1 голос
/ 01 марта 2020

Ваша функция никогда ничего не возвращает.

const getSample = (data) => { //data is a list of json tuples that look like [{x: __, y: ___}, ...]
  const rand = () => Math.random() * data.length;

  const placeholder = [...Array(10).keys()].map(_ => {
    const idx = Math.floor(rand());
    return data[idx];
  });
  
  /* | | | | | | | */
  /* V V V V V V V */
  return placeholder;
};

const data = Array(30).fill(0).map(() => ({
  x: Math.random.between(0, 600),
  y: Math.random.between(0, 600),
}));

const sample = getSample(data);
console.log(sample);
<script src="https://cdn.jsdelivr.net/gh/olian04/better-random/src/index.js"></script>

Вы также можете немного упростить свой код, если хотите. Например:

const getSample = (data, sampleSize=10) => Array(sampleSize).fill(0)
  .map(() => Math.random.select(data));

const data = Array(30).fill(0).map(() => ({
  x: Math.random.between(0, 600),
  y: Math.random.between(0, 600),
}));

const sample = getSample(data);
console.log(sample);
<script src="https://cdn.jsdelivr.net/gh/olian04/better-random/src/index.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...