Задать вопрос
@Swaer

Как добавить в массив только уникальные элементы?

let arr = [[1,23,23,21,1,23,41],[2,12,3,321,234,234,1,31,321,22,3],[12,32,53,1,3,12,3,2],[12,32,53,1,3,12,3,2]].reduce(function(a, b) {
  return a.concat(b);
});

var result = [];
for (var i = 0; i < 6;i++){
  let sum = Math.floor(Math.random() * (arr.length - 0)) + 0;
  var res = result.push(arr[sum]);
}

Объединил массив, из него вытащил 6 рандом элементов и добавил их в новый массив, как сделать проверку, чтобы в новый массив добавлялось 6 уникальных элементов, и при этом не менять массив arr
  • Вопрос задан
  • 904 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 2
Ivanq
@Ivanq
Знаю php, js, html, css
let arr = [[1,23,23,21,1,23,41],[2,12,3,321,234,234,1,31,321,22,3],[12,32,53,1,3,12,3,2],[12,32,53,1,3,12,3,2]].reduce(function(a, b) {
  return a.concat(b);
});

var result = [];
while(result.length < 6) {
  let sum = Math.floor(Math.random() * (arr.length - 0)) + 0;
  if(result.indexOf(arr[sum]) == -1) { // Проверяем
    result.push(arr[sum]);
  }
}


Для ускорения (небольшого) можно отдельно скопировать уникальный arr. То есть:

let arr = [[1,23,23,21,1,23,41],[2,12,3,321,234,234,1,31,321,22,3],[12,32,53,1,3,12,3,2],[12,32,53,1,3,12,3,2]].reduce(function(a, b) {
  return a.concat(b);
});

let unique = arr.filter((val, i) => arr.indexOf(val) == i);

var result = [];
while(result.length < 6) {
  let sum = Math.floor(Math.random() * (unique.length - 0)) + 0;
  if(result.indexOf(unique[sum]) == -1) { // Проверяем
    result.push(unique[sum]);
  }
}
Ответ написан
Комментировать
@forspamonly2
const arr = [].concat([1,23,23,21,1,23,41],[2,12,3,321,234,234,1,31,321,22,3],[12,32,53,1,3,12,3,2],[12,32,53,1,3,12,3,2]);
let set = new Set();
while(set.size < 6) set.add(arr[Math.random()*arr.length|0]);
[...set]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы