Как удалить пустые значения массива ("") из массива?

У меня есть двумерный массив, сгенерированный из таблицы 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

Немного демо-кода было бы неплохо. Используйте jsfiddle или что-то в этом роде. Поскольку пробелы могут исходить от многих разных вещей.

Deckerz 15.04.2019 10:20

сразу после цикла for добавить columns = columns.filter(a => a! = "")

alt255 15.04.2019 10:20

Возможный дубликат Удалить пустые элементы из массива в Javascript

jeprubio 15.04.2019 10:24
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
19
4
48 900
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Ответ принят как подходящий

Вы можете использовать фильтр, например:

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.

DavChana 08.05.2021 19:02

после создания массива столбцов,

отфильтровать пустые значения, подобные этому

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"]

Другие вопросы по теме