Удалить нулевые значения из массива JavaScript - PullRequest
22 голосов
/ 25 января 2010

У меня есть массив JavaScript.

addresses = new Array(document.client.cli_Build.value, 
    document.client.cli_Address.value, 
    document.client.cli_City.value, 
    document.client.cli_State.value, 
    document.client.cli_Postcode.value, 
    document.client.cli_Country.value);
document.client.cli_PostalAddress.value = addresses.join(", ");

Я должен скопировать содержимое всех этих значений массива на почтовый адрес textarea. Когда я использую вышеупомянутую функцию соединения, запятая была добавлена ​​для нулевых значений. Как убрать лишние запятые?

Спасибо

Ответы [ 9 ]

38 голосов
/ 25 января 2010

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

addresses.filter(function(val) { return val !== null; }).join(", ")
6 голосов
/ 29 июля 2015

Другая альтернатива фильтра

myArray.filter(function(val){if(val)return val}).join(", ")

document.write(['this','','',,,,'is','a',,,'test'].filter(function(val){if(val)return val}).join(", "));
5 голосов
/ 25 января 2010

Underscore - полезная библиотека утилит для функционального программирования и манипулирования списками:

_.filter(addresses, function(val) { return val !== null; }).join(", ");

Редактировать: И есть более компактный способ (Спасибо Эндрю Де Андраде!):

_.compact(addresses).join(", ");
3 голосов
/ 27 сентября 2018

Используйте filter метод для удаления всех ложных значений значений:

var list = [null, undefined, 0, 1, 2, '', 'test'];

// ES5:
var result = list.filter(Boolean).join(', ');
console.log(result);

// ES6, saves 3 characters:
var result = list.filter(x => x).join(', ');
console.log(result);
1 голос
/ 09 октября 2017

Используйте следующий код, чтобы удалить только значения null, его краткое и простое:

addresses = addresses.filter(n => (n===null) ? false : true).join(', ');
document.client.cli_PostalAddress.value = addresses;

Если вы хотите удалить null, 0, false & "" (пустая строка) как значения, используйте это:

document.client.cli_PostalAddress.value = addresses.filter(Boolean).join(', ');
0 голосов
/ 19 ноября 2017

address.filter (Boolean) .join (",")

0 голосов
/ 04 мая 2017

Если вы хотите исключить все неопределенные, нулевые, NaN, "", 0, простой способ сделать это - использовать комбинацию функции обратного вызова фильтра и логической функции.

var filterArr=arr.filter(function(val){
   return Boolean(val);  
  });

Когда вы передаете значение в булеву функцию, если значение опущено или равно 0, -0, null, false, NaN, undefined или пустая строка (""), объект имеет начальное значение false ,

Вот пример такого использования:

 function bouncer(arr) {

         var filterArr=arr.filter(function(val){
           return Boolean(val);  
          });

      return filterArr;
    }

Вот несколько тестов:

bouncer([1, null, NaN, 2, undefined]);//should return [1, 2]
bouncer([7, "ate", "", false, 9]);// should return [7, "ate", 9]
bouncer(["a", "b", "c"]);// should return ["a", "b", "c"]
bouncer([false, null, 0, NaN, undefined, ""]);//should return []
0 голосов
/ 26 октября 2016

Можно также использовать Array.prototype.reduce () .

Это уменьшает массив до одного значения, например строка. Вот так:

addresses.reduce(function (a, b) {
        if (a && b) { return a + ', ' + b; }
        if (a) { return a; }
        return b;
      }, '');

a содержит промежуточный результат, b содержит текущий элемент.

0 голосов
/ 25 января 2010
document.client.cli_PostalAddress.value = 
    document.client.cli_PostalAddress.value.replace(/(, )+/g,", ");

Или это должно быть

document.client.cli_PostalAddress.value = 
    document.client.cli_PostalAddress.value
    .replace(/(null, )/g,"").replace(/(, null)/g,"");

??

...