У меня есть массив ["Lorem", "", "ipsum"]
. Я хотел бы удалить пустую строку из этого массива и получить ["Lorem", "ipsum"]
.
Есть ли способ сделать это, не используя цикл и проходя через каждый элемент и удаляя его?
У меня есть массив ["Lorem", "", "ipsum"]
. Я хотел бы удалить пустую строку из этого массива и получить ["Lorem", "ipsum"]
.
Есть ли способ сделать это, не используя цикл и проходя через каждый элемент и удаляя его?
Вы можете использовать filter
:
var newArray = oldArray.filter(function(v){return v!==''});
В MDN есть обходной путь для совместимости с IE8. Вы также можете использовать старый добрый цикл, если вы не собираетесь использовать filter
в другом месте, нет проблем с циклом...
Другой альтернативой является использование функции jQuery . map():
var newArray = $.map( oldArray, function(v){
return v === "" ? null : v;
});
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
function cleanArray(actual)
{
var newArray = new Array();
for(var i = 0; i<actual.length; i++)
{
if (actual[i])
{
newArray.push(actual[i]);
}
}
return newArray;
}
$(function()
{
var old = ["Lorem", "", "ipsum"];
var newArr = cleanArray(old);
console.log(newArr)
});
</script>
Без цикла
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
$(function()
{
var arr = ["Lorem", "", "ipsum"];
arr = $.grep(arr,function(n){
return(n);
});
console.log(arr)
});
</script>
Оба тестируются.
Если вы используете Javascript 1.6 (возможно, не работаете на IE8 или меньше), вы можете использовать
arr.filter(Boolean) //filters all non-true values
например.
[1, false, "", undefined, null, "Lorem"].filter(Boolean); // [1, "Lorem"]
var arr = [a, b, c, e, f, g, h];
arr = jQuery.grep(arr, function (n) {return (n);});
arr теперь [a, b, c, d, e, f, g];