Javascript 通过.splice()删除最后一个类似[[";1";]]的数组,为什么输出=[[]]而不是[]?

Javascript 通过.splice()删除最后一个类似[[";1";]]的数组,为什么输出=[[]]而不是[]?,javascript,jquery,arrays,Javascript,Jquery,Arrays,为什么我不能将最后一个数组删除为空 当移除子数组(数组中的数组)为空时,我需要arr=[]而不是[[]]] 演示: 编辑:我只需一个一个地删除,就像 var arr=[["1"]]; arr[0].splice(0,1); // arr = [[]] 我需要arr=[[“1”,“2”] 演示:您从arr[0]中删除了“1”,因此arr[0]是[],并且arr现在包含一个空数组:[[]。 如果要删除阵列本身,请将arr,而不是arr[0]从arr[0]中删除“1”,因此arr[0]是[],并且

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

当移除子数组(数组中的数组)为空时,我需要
arr=[]
而不是
[[]]]

演示:


编辑:我只需一个一个地删除,就像

var arr=[["1"]];
arr[0].splice(0,1);
// arr = [[]]
我需要
arr=[[“1”,“2”]

演示:

您从
arr[0]
中删除了
“1”
,因此
arr[0]
[]
,并且
arr
现在包含一个空数组:
[[]
。 如果要删除阵列本身,请将
arr
,而不是
arr[0]

arr[0]
中删除
“1”
,因此
arr[0]
[]
,并且
arr
现在包含一个空阵列:
[[]]

如果要删除阵列本身,请拼接
arr
,而不是
arr[0]

您正在拼接阵列上的第一个元素,该元素将从
arr[0]
处的内部阵列中删除
“1”
。这段代码应该删除第一个数组,而不是第一个数组的第一个元素

var arr=[["1","2"],["1","2"]];
arr[0].splice(0,1);
arr[0].splice(0,1);
// arr = [[],["1","2"]];
编辑:如果要删除空的内部数组,则需要这样检查

arr.splice(0, 1);

您正在拼接阵列上的第一个元素,该元素将从位于
arr[0]
的内部阵列中删除
“1”
。这段代码应该删除第一个数组,而不是第一个数组的第一个元素

var arr=[["1","2"],["1","2"]];
arr[0].splice(0,1);
arr[0].splice(0,1);
// arr = [[],["1","2"]];
编辑:如果要删除空的内部数组,则需要这样检查

arr.splice(0, 1);

在你的演示中试试这个

var arr=[["1"]];
arr[0].splice(0,1);
if (arr[0].length === 0) {
    arr.splice(0,1);
}

在你的演示中试试这个

var arr=[["1"]];
arr[0].splice(0,1);
if (arr[0].length === 0) {
    arr.splice(0,1);
}
  • Array.splice
    删除一些元素并返回它们。您的数组仍将保持为数组数组

  • JSON.stringify
    将空数组:
    []
    转换为
    “[]”
    ,因此空数组:
    [[]]
    变为
    “[[]]”

  • 我在jsbin代码中添加了更多示例,以说明代码的实际功能

    var arr=[["1"]];
    arr.splice($.inArray(arr[0],arr));
    
  • Array.splice
    删除一些元素并返回它们。您的数组仍将保持为数组数组

  • JSON.stringify
    将空数组:
    []
    转换为
    “[]”
    ,因此空数组:
    [[]]
    变为
    “[[]]”

  • 我在jsbin代码中添加了更多示例,以说明代码的实际功能

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

    您不能仅使用拼接来完成此项工作,我可以提出以下建议:

    var arr=[["1"]];
    var elem = arr[0].splice(0,1);
    
    $("body").append(JSON.stringify(arr));
    $("body").append(JSON.stringify(elem));
    $("body").append(JSON.stringify([[]]));
    
    然后使用arr.removeOne(0,0)

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

    编辑:还有另一种方法:

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

    您不能仅使用拼接来完成此项工作,我可以提出以下建议:

    var arr=[["1"]];
    var elem = arr[0].splice(0,1);
    
    $("body").append(JSON.stringify(arr));
    $("body").append(JSON.stringify(elem));
    $("body").append(JSON.stringify([[]]));
    
    然后使用arr.removeOne(0,0)

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

    编辑:还有另一种方法:

      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.splice(0,1)
    arr.splice(0,1)
    您正在移除“内部”阵列的第一项。您要拼接“外部”数组的第一项。我要逐个删除示例。
    [[“1”,“2”]]
    @undefined@undefined这是我的一个例子。splice()返回数组,数组中的元素不在参数之外,因此不会更改数组的原始结构
    arr.splice(0,1)
    arr.splice(0,1)
    您正在删除“内部”数组的第一项。您要拼接“外部”数组的第一项。我要逐个删除示例。
    [[“1”,“2”]]
    @undefined@undefined这是我最好的方法()返回数组,数组中没有参数之外的元素,因此不会改变arrayOk的原始结构,我必须检查长度?没有任何其他js函数像
    .splice
    ?好的,我必须检查长度?不是像
    .splice
    ?arr.splice($.inArray(arr[1],arr))这样的任何其他js函数;如果您使用此ypu,我将看到您的答案…请快速尝试,它工作正常…arr.splice($.inArray(arr[1],arr));如果你用这个ypu,我会看到你的答案…快试试它,它工作正常。。。