私は2D配列を持っています:
var array = [["a", "b", "c"],["a", "b", "c"],["a", "b", "c"]]
この配列の列全体を削除したい(つまり、各配列内の3つおきの要素を削除したい)。
解決策は ここ と ここ ですが、どちらもJavaScriptに含まれていないため、状況を関連付けるのに問題があります。
この問題に取り組むための最良の方法は何ですか?場合によっては複数の列を削除し、.splice()メソッドによって配列の長さが変更されるため、.splice()を使用したくないので、範囲外にアクセスすることになります。
ありがとう!
slice
を使用してみてください。元のarray
への変更は変更されません
var x = array.map(function(val){
return val.slice(0, -1);
});
console.log(x); // [[a,b],[a,b],[a,b]]
配列を反復処理し、各サブ配列を接続します。
var idx = 2;
for(var i = 0 ; i < array.length ; i++)
{
array[i].splice(idx,1);
}
JSFiddle 。
編集:範囲外の問題と配列の長さの変更のため、splice
を使用したくないようです。そう:
1.範囲外かどうかを確認し、スライスをスキップできます。
2。削除するインデックスの配列を作成し、その配列に表示されないインデックスから新しい配列を作成することができます(削除する代わりに、反対の条件で新しい配列を作成します)。
このようなもの:
var array = [
["a", "b", "c"],
["a", "b", "c"],
["a", "b", "c"]
];
var idxToDelete = [0,2];
for (var i = 0; i < array.length; i++) {
var temp = array[i];
array[i] = [];
for(var j = 0 ; j < temp.length ; j++){
if(idxToDelete.indexOf(j) == -1) // dont delete
{
array[i].Push(temp[j]);
}
}
}
この関数はスプライスを使用せず、必要な列を削除します。
function removeEl(array, remIdx) {
return array.map(function(arr) {
return arr.filter(function(el,idx){return idx !== remIdx});
});
};
これがあなたが探しているものであることを願っています
splice
はかっこいいです。 nullになることがないように、配列のサイズを変更して削除します。したがって、スプライスを使用すると、各行を繰り返し処理して、適切な要素を削除する必要があります。
var removeCol = function(arr2d, colIndex) {
for (var i = 0; i < arr2d.length; i++) {
var row = arr2d[i];
row.splice(colIndex, 1);
}
}
ソリューションにはmap
関数とsplice
関数を使用します。このような
var array = [["a", "b", "c"],["a", "b", "c"],["a", "b", "c"]];
array = array.map(function(item){
// the 0,2 tells the splice function to remove (skip) the last item in this array
return item.splice(0,2);
});
console.log(array);
// [["a", "b"],["a", "b"],["a", "b",]];
javascript配列からアイテムを削除するためにdelete
を使用しないでください。その理由は、deleteはアイテムを投げますが、内部の長さ変数を更新しないためです。
例
var array = ["a", "b", "c"];
delete array[3];
console.log(array);
// ["a", "b"]
console.log(array.length);
// 3
array = array.splice(0,2);
console.log(array);
// ["a", "b"]
console.log(array.length);
// 2
use splice
これは正しい長さを設定し、配列の項目を削除します。