-2
[1,2,3,3,3,4,4,8]
などの数値配列があり、要素2を削除した場合、目標は配列を順番に保つことですが、値を重複して1つずつシフトします。だから、私が探している結果は[1,2,2,2,3,3,4]
です。私はすべての重複を一連の数字として扱っています。番号配列を左にソートして並べ替えた場合
ご了承ください。
[1,2,3,3,3,4,4,8]
などの数値配列があり、要素2を削除した場合、目標は配列を順番に保つことですが、値を重複して1つずつシフトします。だから、私が探している結果は[1,2,2,2,3,3,4]
です。私はすべての重複を一連の数字として扱っています。番号配列を左にソートして並べ替えた場合
ご了承ください。
、のために設定することにより、最後の値をグループ化すると、この提案が機能します。
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; }
使用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));
これはフリーコーディングサービスではありません。何を試しましたか?あなたは何をしていますか? – shmosel
なぜあなたは2つの配列を追加するのですか5または6 – Mahi
あなたはjavascriptまたはjavaを使用していますか?あなたは両方にタグを付けるが、それらは同じではない... – Cruiser