2016-12-16 5 views
-2

Wenn ich eine Nummer Array wie: [1,2,3,3,3,4,4,8], und ich lösche das Element 2, ist mein Ziel, das Array in Ordnung zu halten, aber die Werte um eins zu verschieben, die Duplikate. Also das Ergebnis, das ich suchen würde, ist: [1,2,2,2,3,3,4]. Ich behandle alle Duplikate als eine Gruppe von Zahlen.Verschieben von Zahlen-Array nach links, aber sortierte

Hilfe wäre willkommen!

+0

Dies ist keine freie Codierung Service. Was hast du probiert? Wo steckst du fest? – shmosel

+0

warum Sie 2 in Array hinzufügen, warum nicht 5 oder 6 – Mahi

+0

verwenden Sie Javascript oder Java? Sie markieren beide, aber sie sind nicht die gleichen ... – Cruiser

Antwort

0

die ursprüngliche Frage mit Gruppierungswerte und immer dieses Ergebnis, indem für eine Unter der Annahme, Gruppiere den letzten Wert, dann funktioniert dieser Vorschlag.

1 2 3 3 3 4 4 8 
1 2 2 2 3 3 4 
^remove 

var array = [1, 2, 3, 3, 3, 4, 4, 8], 
 
    number = 2, 
 
    result = array.reduce(function() { 
 
     var last, next; 
 
     return function (r, a) { 
 
      if (last === undefined) { 
 
       if (a === number) { 
 
        last = a; 
 
       } else { 
 
        r.push(a); 
 
       } 
 
      } else { 
 
       if (a === number) { 
 
        return r; 
 
       } 
 
       if (next === undefined) { 
 
        next = a; 
 
       } 
 
       if (a !== next) { 
 
        last = next; 
 
        next = a; 
 
       } 
 
       r.push(last); 
 
      } 
 
      return r; 
 
     }; 
 
    }(), []); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

Verwenden Array#reduce, um herauszufiltern, die Nummer, die Sie entfernen möchten, und verschieben die Gruppen:

function regroup(arr, numToRemove) { 
 
    var last; 
 
    var current; 
 
    
 
    return arr.reduce(function(r, num) { 
 
    if(current !== undefined && num !== current) { 
 
     last = current; 
 
     current = num; 
 
    } 
 
    
 
    if(last !== undefined) { 
 
     r.push(last); 
 
    } else if(num === numToRemove) { 
 
     current = num; 
 
    } else { 
 
     r.push(num); 
 
    } 
 
    
 
    return r; 
 
    }, []); 
 
} 
 

 
var arr = [1,2,3,3,3,4,4,8, 25, 25, 25, 30, 30, 31]; 
 

 
var result = regroup(arr, 2); 
 

 
console.log('origin: ', JSON.stringify(arr)); 
 
console.log('result: ', JSON.stringify(result));

Verwandte Themen