Я нуждаюсь в том, чтобы удалить повторенные элементы 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] = "";
}
}
}
}
Как я могу делать это правильно?
Если бы ты удалил их вместо того, чтобы оставлять их 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>
Кон Сорт и 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);
Это одна 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);
Во все предыдущие ответы 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)))
Изобретая колесо заново ты можешь делать это следующей формой...
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]
Ты можешь использовать тип информации 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)