Удалите последний массив, например [["1"]], с помощью.splice(), почему output = [[]], а не []?

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

6 ответов

Решение

Вы соединяете первый элемент в массиве, который удаляет "1" из внутреннего массива в arr[0], Этот код должен удалить первый массив, а не первый элемент первого массива.

arr.splice(0, 1);

РЕДАКТИРОВАТЬ: Если вы хотите удалить этот внутренний массив, если он пуст, вам нужно будет проверить его следующим образом.

arr[0].splice(0, 1);
if (arr[0].length === 0)
    arr.splice(0, 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});
  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([[]]));
var arr=[["1"]];
arr[0].splice(0,1);
if (arr[0].length === 0) {
    arr.splice(0,1);
}

Вы удалили "1" от arr[0], так arr[0] является [] а также arr содержит теперь пустой массив: [[]], Если вы хотите удалить сам массив, склейте arrне arr[0]

Попробуйте это в вашем демо....

var arr=[["1"]];
arr.splice($.inArray(arr[0],arr));
Другие вопросы по тегам