0
var arr=[["1"]];
arr[0].splice(0,1);
// arr = [[]]

最後の 1 つの配列を削除して空白にできないのはなぜですか?

削除され、サブ配列 (配列内の配列) が空白の場合は必要ありarr = []ません[[]]

デモ: http://jsbin.com/ehaof/1/edit


編集: 1つずつ削除するのは1つだけです

var arr=[["1","2"],["1","2"]];
arr[0].splice(0,1);
arr[0].splice(0,1);
// arr = [[],["1","2"]];

私は欲しいarr = [["1","2"]];

デモ: http://jsbin.com/ehaof/9/edit

4

6 に答える 6

2

"1"で内部配列から削除する配列の最初の要素を接合していarr[0]ます。このコードは、最初の配列の最初の要素ではなく、最初の配列を削除する必要があります。

arr.splice(0, 1);

編集:空の場合にその内部配列を削除する場合は、次のように確認する必要があります。

arr[0].splice(0, 1);
if (arr[0].length === 0)
    arr.splice(0, 1);
于 2013-03-20T10:25:57.300 に答える
1

"1"からを削除したarr[0]ため、空の配列 : が含まarr[0]れるように[]なりました。配列自体を削除したい場合は、 spliceではなくarr[[]]arrarr[0]

于 2013-03-20T10:24:34.710 に答える
1
var arr=[["1"]];
arr[0].splice(0,1);
if (arr[0].length === 0) {
    arr.splice(0,1);
}
于 2013-03-20T10:27:20.253 に答える
1

仕事をするためにスプライスだけを使用することはできません。私はこれを提案できます:

  Array.prototype.removeOne = function(i, j) {
      if(this[i] == undefined) return this;
      this[i].splice(j,1);
      if (this[i].length == 0) this.splice(i,1);
      return this;
  };

次に使用しますarr.removeOne(0,0)

最初のパラメーターはメインの配列インデックスで、2 番目のパラメーターは削除するサブ配列要素のインデックスです。

編集:別の方法があります:

var arr=[["1"],["2"]];
arr[0].splice(0,1);
arr=arr.filter(function(ar){return ar.length});
于 2013-03-20T11:01:36.523 に答える
1
  1. Array.splice一部の要素を削除して返します。配列の配列は、配列の配列のままです。

  2. は、空の配列:を にJSON.stringify変換するため、配列の空の配列:になります。[]"[]"[[]]"[[]]"

コードが実際に何をするかを説明するために、jsbin コードにいくつかの例を追加しました。

var arr=[["1"]];
var elem = arr[0].splice(0,1);

$("body").append(JSON.stringify(arr));
$("body").append(JSON.stringify(elem));
$("body").append(JSON.stringify([[]]));
于 2013-03-20T10:30:54.523 に答える
0

あなたのデモでこれを試してください....

var arr=[["1"]];
arr.splice($.inArray(arr[0],arr));
于 2013-03-20T10:30:22.917 に答える