let numbers = [89,17,156,89,156,156,89,6,89,89,30];
let uniqueNumbers = [];
let uniqueNumberss = []
for(let i=0;i<numbers.length;i++){
let searchElements = numbers[i];
let indexes = [];
let index = numbers.indexOf(searchElements);
while ( index != -1 ) {
indexes.push( index );
index = numbers.indexOf(searchElements, index + 1 );
let numbers = [1, 4, 5, 9, 2, 5, 1];
let uniqueNumbers = [];
let swap = [];
for (let i = 0; i < numbers.length; i++) {
for (let j = i + 1; j < numbers.length; j++) {
if (numbers[i] === numbers[j]) {
swap.push(numbers[i]);
}
}
}
console.log(swap)
for (i = 0; i < swap.length; i++) {
if (swap[i] === swap[i + 1]) {
swap.splice(i, 2);
i = 0;
};
}
console.log(swap);
console.log(numbers);
for (i = 0; i < numbers.length; i++) {
if (swap.indexOf(numbers[i]) < 0) {
uniqueNumbers.push(numbers[i]);
}
}
console.log(uniqueNumbers);
Сделала задание с использованием методов для работы с массивами.
let numbers = [1, 4, 5, 9, 2, 5, 1];
let uniqueNumbers = [];
while (numbers.length > 0){ // цикл работает пока длина массива не нулевая
let currentNumber = numbers[0];
if (numbers.indexOf(currentNumber) != -1 ){ // убираем элемент из массива для простоты последующего сравнения
numbers.shift();
}
if (numbers.indexOf(currentNumber) == -1 ){ // если такого элемента в массиве больше нет, то записываем в массив уникальных элементов
uniqueNumbers.push(currentNumber);
}
else { // Иначе удаляем все повторяющиеся элементы из массива
while (numbers.indexOf(currentNumber) != -1 ){
numbers.splice(numbers.indexOf(currentNumber),1);
}
}
}
for (let i = 0; i < numbers.length; i++) {
let number = numbers[i];
let counter = 0;
for (let j = 0; j < numbers.length; j++) {
if (number === numbers[j]) {
counter++;
}
}
if (counter === 1) {
uniqueNumbers.push(number);
}
}
Спасибо за ваш вариант решения. Так же, понадобилось время, чтобы понять в чем суть. Спустя 3 года, но ваш комментарий помогает. Очень грамотное решение!
var numbers = [1, 4, 5, 9, 2, 5, 1];
var uniqueNumbers = [];
for (var i = 0; i < numbers.length; i++) {
var number = numbers[i];
var k = 0;
for (var j = 0; j < numbers.length; j++) {
if (number === numbers[j]) {
k ++;
}
}
if (k === 1) {
uniqueNumbers.push(number)
}
}
Решение через создание массива неуникальных значений. Сначала число попадает в массив уникальных значений, но если попадается снова, то попадает в массив неуникальных значений, удаляется из массива уникальных и больше в него не попадает
Вариант не самый читаемый, но хотелось сделать не цикл в цикле, который сразу приходит в голову)
Спойлер
let numbers = [1, 4, 5, 9, 2, 5, 1];
let uniqueNumbers = [];
let noUniqueNumbers = [];
for (let prop of numbers) {
if (!uniqueNumbers.includes(prop) && !noUniqueNumbers.includes(prop)) {
uniqueNumbers.push(prop);
} else if (uniqueNumbers.includes(prop)) {
uniqueNumbers.splice(uniqueNumbers.indexOf(prop), 1);
noUniqueNumbers.push(prop);
}
}
let numbers = [1, 4, 5, 9, 2, 5, 1];
let uniqueNumbers = [];
for (let i = 0; i < numbers.length; i++) {
let newArr = numbers.filter(number => number === numbers[i]);
if (newArr.length === 1) {
uniqueNumbers.push(numbers[i]);
}
}
Отвечу для тех, кто когда то будет пытаться найти ответ на этот вопрос. Здесь два цикла, они будут перебирать следующим образом: i=0, перебирается второй цикл: j=0, j=1, j=2, … j=lenght, потом i=1, снова перебирается цикл: j=0, j=1, …j=lenght