2016-12-16 3 views
-2

[1,2,3,3,3,4,4,8]などの数値配列があり、要素2を削除した場合、目標は配列を順番に保つことですが、値を重複して1つずつシフトします。だから、私が探している結果は[1,2,2,2,3,3,4]です。私はすべての重複を一連の数字として扱っています。番号配列を左にソートして並べ替えた場合

ご了承ください。

+0

これはフリーコーディングサービスではありません。何を試しましたか?あなたは何をしていますか? – shmosel

+0

なぜあなたは2つの配列を追加するのですか5または6 – Mahi

+0

あなたはjavascriptまたはjavaを使用していますか?あなたは両方にタグを付けるが、それらは同じではない... – Cruiser

答えて

0

、のために設定することにより、最後の値をグループ化すると、この提案が機能します。

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

使用Array#reduceは、削除したい番号をフィルタリング、およびグループをシフトします

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));
値をグループ化し、この結果を得ると、元の質問を想定し

関連する問題