Удаление столбца из многомерного массива в JavaScript
У меня есть 2D-массив:
var array = [["a", "b", "c"],["a", "b", "c"],["a", "b", "c"]]
Я хочу удалить весь столбец этого массива (т. е. удалить каждый третий элемент в каждом массиве).
есть решения здесь и здесь, но ни один из них не находится в javascript, поэтому у меня возникли проблемы, связанные с ситуациями.
Как лучше всего подойти к этой проблеме? Я не хочу использовать .splice (), потому что в некоторых случаях я буду удалять несколько столбцов и .сращивание() метод изменит длину массива, поэтому я в конечном итоге получаю доступ за пределы.
спасибо!
5 ответов
попробуйте использовать slice
. Это не изменит никаких изменений в вашем оригинале array
var x = array.map(function(val){
return val.slice(0, -1);
});
console.log(x); // [[a,b],[a,b],[a,b]]
выполните итерацию по массиву и соедините каждый под массив:
var idx = 2;
for(var i = 0 ; i < array.length ; i++)
{
array[i].splice(idx,1);
}
редактировать:
Я вижу, вы не хотите использовать splice
из-за проблем вне границ и изменения длины массива.
Итак:
1.Вы можете проверить, если вы вне пределов и пропустить срез.
2.Вы можете создать массив индексов, которые хотите удалить, и просто создать новые массивы из индексов, которые не отображаются в этом массиве (вместо удаление, создание новых массивов с противоположным состоянием).
что-то вроде этого:
var array = [
["a", "b", "c"],
["a", "b", "c"],
["a", "b", "c"]
];
var idxToDelete = [0,2];
for (var i = 0; i < array.length; i++) {
var temp = array[i];
array[i] = [];
for(var j = 0 ; j < temp.length ; j++){
if(idxToDelete.indexOf(j) == -1) // dont delete
{
array[i].push(temp[j]);
}
}
}
splice
это круто. Он изменяет размер массива, поскольку он удаляет вещи, поэтому вы не заканчиваете с нулями. Таким образом, используя splice, вам просто нужно перебрать каждую строку и удалить правильный элемент.
var removeCol = function(arr2d, colIndex) {
for (var i = 0; i < arr2d.length; i++) {
var row = arr2d[i];
row.splice(colIndex, 1);
}
}
использовать map
функции splice
функция для вашего решения. такой
var array = [["a", "b", "c"],["a", "b", "c"],["a", "b", "c"]];
array = array.map(function(item){
// the 0,2 tells the splice function to remove (skip) the last item in this array
return item.splice(0,2);
});
console.log(array);
// [["a", "b"],["a", "b"],["a", "b",]];
не используйте delete
для удаления элементов из массива javascript. причина в том, что delete выбросит элемент, но не обновит внутреннюю переменную длины.
пример
var array = ["a", "b", "c"];
delete array[3];
console.log(array);
// ["a", "b"]
console.log(array.length);
// 3
array = array.splice(0,2);
console.log(array);
// ["a", "b"]
console.log(array.length);
// 2
использовать splice
это устанавливает правильную длину и удаляет элемент массива.
эта функция не использует splice и удаляет любой столбец, который вы хотите:
function removeEl(array, remIdx) {
return array.map(function(arr) {
return arr.filter(function(el,idx){return idx !== remIdx});
});
};
надеюсь, это то, что вы ищете