Могу ли я использовать array.filter (), чтобы получить образцы элементов из массива? - PullRequest
0 голосов
/ 04 апреля 2020

Я изучаю JavaScript и пытаюсь применить его в статистической выборке. Приведенная ниже функция не работает, но предполагает:

  • массив = совокупность для изучения
  • выборка = выборка из совокупности
  • элемент = каждое наблюдение из совокупности
const generateSample = array => {
    var sample = []
    array.filter(element => {
            (element in sample) ? return null : sample = [...sample, element]
    })
}

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

После некоторого исследования, это то, что я нашел, когда извлекал образец размера N из массива

  1. Перемешать массив
  2. Нарезать перемешанный массив, чтобы получить образец размера N

ПРИМЕЧАНИЕ: Функция shuffleArray была создана с помощью этого вопроса и ответа

Ниже приведены две функции, которые решили проблему

// Function that shuffles an array
const shuffleArray = array => {
  if (array.length === 1) return array

  const randomIndex = Math.floor(Math.random() * array.length);
  const randomElement = array[randomIndex]

  array = array.filter((_, i) => i !== randomIndex)

  return [randomElement, ...shuffleArray(array)];
};

// Function that returns sub array from array
const subArray = (array, n) => array.slice(0, n)

const population = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
const shuffled = shuffleArray(population)
console.log( shuffled )
console.log(subArray(shuffled, 4))
0 голосов
/ 04 апреля 2020

Array.filter ожидает функцию, которая возвращает true или false (сохранять ли элемент в массиве). Функция, которую вы передаете filter, возвращает ноль ... или не возвращается вообще. (element in array) проверит, является ли элемент array.length> = как оператор in, чтобы проверить, находится ли свойство в объекте или в его цепочке прототипов. Чтобы проверить, находится ли элемент в массиве, используйте .includes() или .indexOf() >= 0. Также троичный оператор condition ? expr : expr ожидает выражения, а не такие выражения, как return null или sample =

Может быть что-то вроде?

let data = [1, 2, 3, 4, 5];

let sample = data.filter(() => Math.round(Math.random()));

console.log(sample);
...