Ответ 1
Вы можете использовать filter
, чтобы отфильтровать нулевые значения:
addresses.filter(function(val) { return val !== null; }).join(", ")
У меня есть массив 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(", ");
Мне нужно скопировать содержимое всего этого значения массива в текстовую область почтового адреса. когда я использую указанную выше функцию соединения, для нулевых значений добавлена запятая. Как удалить дополнительные запятые?
Спасибо
Вы можете использовать filter
, чтобы отфильтровать нулевые значения:
addresses.filter(function(val) { return val !== null; }).join(", ")
Другая альтернатива фильтра
myArray.filter(function(val){if(val)return val}).join(", ")
document.write(['this','','',,,,'is','a',,,'test'].filter(function(val){if(val)return val}).join(", "));
Underscore - хорошая утилитная библиотека для функционального программирования и управления списками:
_.filter(addresses, function(val) { return val !== null; }).join(", ");
Изменить: И есть более компактный способ (спасибо Andrew De Andrade!):
_.compact(addresses).join(", ");
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,"");
??
Можно также использовать Array.prototype.reduce().
Он уменьшает массив до одного значения, например. строка. Например:
addresses.reduce(function (a, b) {
if (a && b) { return a + ', ' + b; }
if (a) { return a; }
return b;
}, '');
a
содержит промежуточный результат,
b
содержит текущий элемент.
Если вы хотите исключить все undefined, null, NaN, "", 0, простой способ сделать это - использовать комбинацию функции обратного вызова фильтра и логической функции.
var filterArr=arr.filter(function(val){
return Boolean(val);
});
Когда вы передаете значение логической функции, если значение опущено или равно 0, -0, null, false, NaN, undefined или пустая строка (""), объект имеет начальное значение ложных.
Вот пример этого использования:
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 []
Используйте следующий код, чтобы удалить только значения null
, его короткие и простые:
addresses = addresses.filter(n => (n===null) ? false : true).join(', ');
document.client.cli_PostalAddress.value = addresses;
Если вы хотите удалить значения null
, 0
, false
и ""
(Empty String), а затем используйте это:
document.client.cli_PostalAddress.value = addresses.filter(Boolean).join(', ');
address.filter(Boolean).join( "," )