У меня есть двумерный массив, сгенерированный из таблицы html с помощью jQuery, но некоторые значения пусты, поэтому отображается "".
Как я могу удалить пустые значения?
<table>
<tr>
<th>1A</th>
<th>1B</th>
<th>1C</th>
</tr>
<tr>
<td>2A</td>
<td>2B</td>
<td>2C</td>
</tr>
<tr>
<td></td>
<td>3B</td>
<td>3C</td>
</tr>
<tr>
<td></td>
<td></td>
<td>4C</td>
</tr>
</table>
<script>
var columns = $('tr').first().children().map(function(i) {
return [
$('tr').map(function(){
return $(this).children().eq(i).text()
}).get()
]
}).get();
<script>
Я уже пробовал следующий код:
for( var i = 0; i < columns[0].length; i++){
if ( columns[0][i] === "") {
columns[0].splice(i, 1);
}
}
Это работало для некоторых пустых значений, но по какой-то причине не все они были удалены.
Выход: https://imgur.com/e7BAdQK
сразу после цикла for добавить columns = columns.filter(a => a! = "")
Возможный дубликат Удалить пустые элементы из массива в Javascript
Возможный дубликат Удалить пустые строки из массива при сохранении записи Без цикла?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать фильтр, например:
arr = arr.filter(item => item);
Пример:
let arr = ['One', 'Two', '', 'Four', '', ''];
arr = arr.filter(item => item);
console.info(arr);
// Result
// ['One', 'Two', 'Four']
Потому что пустая строка оценивается как логическое значение false.
Он работает со всеми ложными значениями, такими как 0, false, null, undefined, '' и т. д.
Если вы хотите сохранить некоторые значения, такие как число 0 (ноль), вы можете использовать item !== undefined. Это фильтрует только неопределенные значения. Не забудьте обрезать строку или проверить с помощью регулярного выражения, чтобы убедиться, что пустые строки не содержат пробелов.
Работал и в Google Apps Script.
после создания массива столбцов,
отфильтровать пустые значения, подобные этому
columns = columns.filter((v) => v != '')
Попробуйте отфильтровать с помощью функции Boolean:
columns.filter(Boolean)
Это отфильтрует все ложные значения
Это потому, что когда вы columns[0].splice(i, 1); вы изменяете тот же массив, который вы повторяете, поэтому вы можете использовать фильтр массива, например
columns[0] = columns[0].filter((val) => val != "");
вместо цикла for
Просто используйте функцию фильтра:-
columns = columns.filter(col => col);
Он удалит пустые значения.
Если некоторые значения могут быть 0, отфильтруйте их, сверив с "" (поскольку 0 также оценивается как false, поэтому логические проверки не пройдут для 0):
columns[0].filter(col => col != "");
Вы можете легко удалить значения empty , null , undefined из массива.
let my_array = ['One', undefined, 'Two', '', null, 'Four', '', '', 'Five'];
my_array = my_array.filter((item) => item);
console.info(my_array);Допустим, в ES6 у вас есть следующий массив:
arr = [1, 2, 3, '', false, '4'];
И вы хотите удалить '' (что является пустым значением) из массива. Ты можешь сделать:
const filter = (...args) => args.filter(el => el !== '');
console.info(filter(...arr));
[1, 2, 3, false, "4"] // Output
Или используя карту (обычный JS)
const myArr = [1, 2, '', '4'];
noEmptyStringInThisArray = [];
myArr.map((elem) => {
if (elem !== '') {
noEmptyStringInThisArray.push(elem);
}
})
console.info(noEmptyStringInThisArray);
// [1, 2, "4"]
Немного демо-кода было бы неплохо. Используйте jsfiddle или что-то в этом роде. Поскольку пробелы могут исходить от многих разных вещей.