web-dev-qa-db-ja.com

javascriptの多次元配列から列を削除する

私は2D配列を持っています:

var array = [["a", "b", "c"],["a", "b", "c"],["a", "b", "c"]]

この配列の列全体を削除したい(つまり、各配列内の3つおきの要素を削除したい)。

解決策は ここここ ですが、どちらもJavaScriptに含まれていないため、状況を関連付けるのに問題があります。

この問題に取り組むための最良の方法は何ですか?場合によっては複数の列を削除し、.splice()メソッドによって配列の長さが変更されるため、.splice()を使用したくないので、範囲外にアクセスすることになります。

ありがとう!

12
user3757174

slice を使用してみてください。元のarrayへの変更は変更されません

var x = array.map(function(val){
    return val.slice(0, -1);
});

console.log(x); // [[a,b],[a,b],[a,b]]
18
Rahil Wazir

配列を反復処理し、各サブ配列を接続します。

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]);
        }
    }
}

新しいJSFiddle

6
Amir Popovich

この関数はスプライスを使用せず、必要な列を削除します。

function removeEl(array, remIdx) {
 return array.map(function(arr) {
         return arr.filter(function(el,idx){return idx !== remIdx});  
        });
};

これがあなたが探しているものであることを願っています

2
sergeyz

spliceはかっこいいです。 nullになることがないように、配列のサイズを変更して削除します。したがって、スプライスを使用すると、各行を繰り返し処理して、適切な要素を削除する必要があります。

var removeCol = function(arr2d, colIndex) {
    for (var i = 0; i < arr2d.length; i++) {
        var row = arr2d[i];
        row.splice(colIndex, 1);
    }
}

http://jsfiddle.net/eB8LD/

2
Alex Wayne

ソリューションには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これは正しい長さを設定し、配列の項目を削除します。

2
ins0