Удалять повторенные элементы array

Я нуждаюсь в том, чтобы удалить повторенные элементы array, но меня удаляет поле или это размещает пустота.

Мой код - следующий:

for (var ib = 0; ib <= Idborrar.length; ib++) {
  for (var j = 0; j < Idborrar.length - 1; j++) {
    if (ib != j) {
      if (Idborrar[ib] == Idborrar[j]) {
        Idborrar[ib] = "";
      }
    }
  }
}

Как я могу делать это правильно?

10
задан 19.09.2019, 02:29
6 ответов

Если бы ты удалил их вместо того, чтобы оставлять их vacГ - вы, ты cambiarГ - в нее relaciГіn индексов со стоимостью оно не функционировало бы хорошо.

AsГ - что я предлагаю тебе загружать array индексами элементов, которые ты не должен копировать, потом сохраняешь в новом array стоимость что, если, который ты хочешь, и разбиваешь старый array.

var Idborrar = ['a','b','a','c','a','d','a'];
let indicesNoCargar = []
function pro (){
  for (var ib = 0; ib <= Idborrar.length; ib++) {
    for (let j = 0; j < Idborrar.length - 1; j++) {
      if (ib != j) {
        if (Idborrar[ib] == Idborrar[j]) {
          if(ib !== indicesNoCargar[indicesNoCargar.length-1])
          indicesNoCargar.push(ib);
        }
      }
    }
  }
  let idborrarNew = [];
  let j=0;
  console.log(indicesNoCargar)
  for (let i=0; i< Idborrar.length; i ++){
    if(i != indicesNoCargar[j]){
      idborrarNew.push(Idborrar[i]);  
      j++;
    }
  }
  Idborrar = idborrarNew;
}
function output() {
  for( var i = 0 ;i<Idborrar.length; i++){
    $('#mu').append(Idborrar[i]+'-');
  }
}
pro();
output();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id= "m">
  ['a','b','a','c','a','d','a'];
</div>
<div id= "mu">
</div>
2
ответ дан 02.12.2019, 00:27
  • 1
    У меня остается сомнение, если ты хочешь показать ее в только однажды, или ни одна, из-за которой это повторенный элемент – E.rick 15.09.2019, 20:53

Кон Сорт и Filter

ты Можешь упорядочивать array с sort и удалять каждый элемент, который равно как предыдущего с filter

const productos = ["Naranjas","Peras","Aceite","Tomate","Champu","Aceite"];

function borrar(arr) {
    return arr.sort().filter(function(ProductoActual, PosicionActual, arry) {
        return !PosicionActual || ProductoActual != arry[PosicionActual - 1];
    })
 }

const productos2 = borrar(productos);

console.info(productos2);
2
ответ дан 02.12.2019, 00:27
  • 1
    Ответ интересен, может добавлять explicació n có я говорю, чтобы улучшать качество. – the-breaker 21.09.2019, 15:07

Это одна soluciГіn используя splice и пробегая меньше договоренность, чем необходимое, так как в iteraciГіn укрытая нет необходимости обращаться с начала. Изменяется первоначальная договоренность и удаляются элементы. Не использовав indexOf tambiГ©n приуменьшаются поездки implГ-citos.

a = [1,2,2,3,3,4,5,5,5,6,7,7];
let i = 0;
while (i < a.length) {
	let j = i + 1;
	while (j < a.length) {
		if (a[i] == a[j])
			a.splice(j,1);
		else
			j++;
	}
	i++;
}
console.log(a);
1
ответ дан 02.12.2019, 00:27

Во все предыдущие ответы querГ, - когда ты складываешь funciГіn оригинал, измененный (я применил к нему исправления для того, чтобы оно функционировало ожидаемой формы), и в конце концов я предлагаю другие спусковые салазки в ней funciГіn уменьши ( https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Array/reduce ).

Перед тем, как продолжать с моими двумя решениями, podrГ-схвати инспектировать этот post: https://medium.com/dailyjs/how-to-remove-array-duplicates-in-es6-5daa8789641c , который образец три простых способа удалять дубликаты (в предыдущих ответах уже они показали какие-то из них тебе):

const ds = ['a', 'b', 'a', 'b', 'c', 'e', 'e', 'c', 'd', 'd', 'd', 'd']

// Usando la función Set
console.log('Usando Set ' + JSON.stringify(
  [ ...new Set(ds) ]
))

// Usando la función Filter
console.log('Usando Filter ' + JSON.stringify(
  // Lo que hace es comparar un elemento actual con los que pasaron en
  // la comparación, si el indice es el de uno de los que pasaron, entonces
  // necesariamente está duplicado.
  ds.filter((item, idx) => ds.indexOf(item) === idx)
))

// Usando la función Reduce
console.log('Usando Reduce ' + JSON.stringify(
  // Lo que hace es comparar un elemento actual con los que pasaron en
  // la comparación, si el indice es el de uno de los que pasaron, entonces
  // necesariamente está duplicado.
  ds.reduce((result, current) => {
    return result.includes(current) ? result : [ ...result, current ]
  }, [])
))

В continuaciГіn решения, которые я показываю тебе aquГ - первые спусковые салазки в тебе funciГіn оригинал (с исправлениями), и вторая основывается в ней funciГіn уменьшает, но utilicГ© indexOf вместо includes, чтобы проверять в результатах из-за дубликатов.

const dataset1 = ['a', 'b', 'a', 'b', 'c', 'e', 'e', 'c', 'd', 'd', 'd', 'd']

// Tu función mejorada:

const originalModFunction = function (ds) {
  const idborrar = [ ...ds ]

  for (let row = 0; row < idborrar.length; row++) {
    // si es nulo ignorar, dado que fue marcado como duplicado
    if (idborrar[row] === null) {
      continue
    }
    // En esta línea ten en cuenta que revisas hacia adelante siempre, los
    // "que pasaron" ya garantizan que todos los elementos para atrás del
    // arreglo son diferentes.
    for (let nextRow = row + 1; nextRow < idborrar.length; nextRow++) { 
       if (idborrar[nextRow] === idborrar[row]) {
         idborrar[nextRow] = null
       }
    }
  }
  
  // Quita todos los nulos
  return idborrar.filter(item => item)
}

// Una variante a todas las soluciones propuestas en todas las respuestas utilizando
// solo reduce (https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Array/reduce)

const noDupsReduceFunction = function (ds) {
  return ds.reduce(function (accumulator, currentValue) {
    if (accumulator.indexOf(currentValue) === -1) {
      accumulator.push(currentValue)
    }
    return accumulator
  }, [])
}

// Comparando
console.log('Resultado función original modificada: ' + JSON.stringify(originalModFunction(dataset1)))
console.log('Resultado de la función que usa reduce: ' + JSON.stringify(noDupsReduceFunction(dataset1)))
1
ответ дан 02.12.2019, 00:27
  • 1
    очень хороший вклад, давайте надеяться, что этот ответ получает больше опору. – the-breaker 21.09.2019, 18:16

Изобретая колесо заново ты можешь делать это следующей формой...

    let a = [0,1,2,3,4,5,1,1,2,3,4,5,1];
    for (let i = a.length - 1; i > 0; i--) {
        let elem = a[i];
        for(let j = i-1; j >= 0; j--){
            if(elem == a[j]){
                a.splice(j,1);
            }
        }           
    }
    console.log(a); //[0,2,3,4,5,1]
0
ответ дан 02.12.2019, 00:27

Ты можешь использовать тип информации Set , которая не позволяет дублированную стоимость.

let duplicados = [1,1,2,2,3,3,4,4,5,5,6,6,7]
let unicos = Array.from(new Set(duplicados))
console.log(unicos)
5
ответ дан 02.12.2019, 00:27
  • 1
    Интересный ответ, не estarí в demá s explicació n, поскольку оно функционирует. – the-breaker 19.09.2019, 01:01
  • 2
    Главным образом тип objecto Set не позволяет дублированную стоимость, чтобы читать немного má s на puedes использовать documenaciò n developer.mozilla.org/es/docs/Web/JavaScript/Referencia/… – cjara 19.09.2019, 21:25
  • 3
    спасибо, хотя sugerí чтобы помещать explicació n как часть ответа. – the-breaker 19.09.2019, 21:27