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

为什么我不能将最后一个数组删除为空白?

删除并且子数组(数组中的数组)为空白时我arr = []不需要[[]]

演示:http: //jsbin.com/ehacof/1/edit


编辑:我只是一一删除就好了

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/ehacof/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"from ,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
  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 回答
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)

第一个参数是主数组索引,第二个参数是要删除的子数组元素的索引。

编辑:还有另一种方法:

var arr=[["1"],["2"]];
arr[0].splice(0,1);
arr=arr.filter(function(ar){return ar.length});
于 2013-03-20T11:01:36.523 回答
0

在你的演示中试试这个....

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