Удалите последний массив, например [["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"]];
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});
Array.splice
удаляет некоторые элементы и возвращает их. Ваш массив массивов все равно останется массивом массивов.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));