Удалить пустые элементы из массива в Javascript

Как удалить пустые элементы из массива в JavaScript?

Есть ли простой способ, или мне нужно пройти через него и удалить их вручную?

Мы только что выпустили На этот вопрос ответили почти 9 лет назад, когда в Array.prototype Глядя на вывод

Теперь, безусловно, я бы просто рекомендовал вам использовать filter Я бы порекомендовал использовать

. Имейте в виду, что этот метод вернет вам новый массив с элементами, которые соответствуют критериям функции обратного вызова, которую вы ему предоставляете, например, если вы хочу удалить null или undefined Однако я не против использования бесплатный сторонний скрипт / сервис.

var array = [0, 1, null, 2, "", 3, undefined, 3,,,,,, 4,, 4,, 5,, 6,,,,];

var filtered = array.filter(function (el) {
  return el != null;
});

console.log(filtered);

Это будет зависеть от того, что вы считаете «пустым», например, если вы имели дело со строками, вышеуказанная функция не удалит элементы, которые являются пустой строкой.

offer-bind-operator Когда мы хотим использовать функцию как , который содержит пустую строку "", 0, NaN, null, undefined и false Глядя на вывод

Вы можете просто перейти к функции конструктора filter метод, Boolean или просто вернуть один и тот же элемент в функцию критериев фильтра, например:

var filtered = array.filter(Boolean);

или

var filtered = array.filter(function(el) { return el; });

Это работает в обоих случаях, потому что { *} метод в первом случае вызывает конструктор filter как функцию, преобразуя значение, а во втором случае метод Boolean внутренне преобразует возвращаемое значение обратного вызова неявно в filter старый ответ: { *} Не делай этого! Boolean Глядя на вывод

сделать это синхронно, filter, передавая обратный вызов, который возвращает true, например:

var sparseArray = [0, , , 1, , , , , 2, , , , 3],
    cleanArray = sparseArray.filter(function () { return true });

console.log(cleanArray); // [ 0, 1, 2, 3 ]

Простые способы: или — (только для

Я использую этот метод, расширяя нативный Прототип массива:

Array.prototype.clean = function(deleteValue) {
  for (var i = 0; i < this.length; i  ) {
    if (this[i] == deleteValue) {         
      this.splice(i, 1);
      i--;
    }
  }
  return this;
};

test = new Array("", "One", "Two", "", "Three", "", "Four").clean("");
test2 = [1, 2,, 3,, 3,,,,,, 4,, 4,, 5,, 6,,,,];
test2.clean(undefined);

Или вы можете просто вставить существующие элементы в другой массив:

// Will remove all falsy values: undefined, null, 0, false, NaN and "" (empty string)
function cleanArray(actual) {
  var newArray = new Array();
  for (var i = 0; i < actual.length; i  ) {
    if (actual[i]) {
      newArray.push(actual[i]);
    }
  }
  return newArray;
}

cleanArray([1, 2,, 3,, 3,,,,,, 4,, 4,, 5,, 6,,,,]);

или — Классический способ: простая итерация

var arr = [1,2,,3,,-3,null,,0,,undefined,4,,4,,5,,6,,,,];


arr.filter(n => n)
// [1, 2, 3, -3, 4, 4, 5, 6]

arr.filter(Number) 
// [1, 2, 3, -3, 4, 4, 5, 6]

arr.filter(Boolean) 
// [1, 2, 3, -3, 4, 4, 5, 6]

через jQuery: single «Роды Если вам нужно присвоить ненулевое значение переменной или свойству, передать его в функцию или вернуть его из функции, то null — почти всегда лучший вариант. Проще говоря, JavaScript использует undefined, а программисты должны использовать null. «

['','1','2',3,,'4',,undefined,,,'5'].join('').split(''); 
// output:  ["1","2","3","4","5"]

ОБНОВЛЕНИЕ — просто еще один быстрый, крутой способ (с использованием ES6):

var arr = [1,2,null, undefined,3,,3,,,0,,,[],,{},,5,,6,,,,],
    len = arr.length, i;

for(i = 0; i < len; i   )
    arr[i] && arr.push(arr[i]);  // copy non-empty values to the end of the array

arr.splice(0 , len);  // cut the array and leave only the non-empty values

arr // [1,2,3,3,[],Object{},5,6]

Через jQuery:

var arr = [1,2,,3,,3,,,0,,,4,,4,,5,,6,,,,];

arr = $.grep(arr,function(n){ return n == 0 || n });

arr // [1, 2, 3, 3, 0, 4, 4, 5, 6]

ОБНОВЛЕНИЕ — просто еще один быстрый, крутой способ (использование ES6):

var arr = [1,2,null, undefined,3,,3,,,0,,,4,,4,,5,,6,,,,], 
    temp = [];

for(let i of arr)
    i && temp.push(i); // copy each non-empty value to the 'temp' array

arr = temp;
delete temp; // discard the variable

arr // [1, 2, 3, 3, 4, 4, 5, 6]

в массиве и создать новую группу элементов. Вот как это сделать с помощью

['foo', '',,,'',,null, ' ', 3, true, [], [1], {}, undefined, ()=>{}].filter(String)

// ["foo", null, " ", 3, true, [1], Object {}, undefined, ()=>{}]

Если вам нужно удалить ВСЕ пустые значения («», null, undefined и 0):

arr = arr.filter(function(e){return e}); 

будет работать как шарм.

arr = arr.filter(function(e){ return e.replace(/(rn|n|r)/gm,"")});

Пример:

arr = ["hello",0,"",null,undefined,1,100," "]  
arr.filter(function(e){return e});

Return:

["hello", 1, 100, " "]

ОБНОВЛЕНИЕ (на основе комментария Альнитака)

В некоторых ситуациях вы можете захотеть сохранить «0» в массиве и удалить все остальное (null, undefined и «»), это один из способов:

arr.filter(function(e){ return e === 0 || e });

Return:

["hello", 0, 1, 100, " "]

Просто один вкладыш:

[1, false, "", undefined, 2].filter(Boolean); // [1, 2]

или используя underscorejs.org :

_.filter([1, false, "", undefined, 2], Boolean); // [1, 2]
// or even:
_.compact([1, false, "", undefined, 2]); // [1, 2]

Если у вас есть Javascript 1.6 или более поздней версии вы можете использовать Array.filter, используя тривиальную функцию обратного вызова return true, например:

arr = arr.filter(function() { return true; });

в вашем CSS .filter мы можем использовать

Ссылочная страница MDN также содержит отличную версию для проверки ошибок filter, которую можно использовать в интерпретаторах JavaScript, которые не поддерживают официальная версия.

Обратите внимание, что это не приведет к удалению null записей или записей с явным значением undefined, но OP специально запросил «пропущенные» записи.

Для удаления дырок, вы должны использовать

arr.filter(() => true)
arr.flat(0) // Currently stage 3, check compatibility before using this

Мне было интересно, как я могу динамически улучшить страницу jQuery Mobile? & # xA ; & # xA ; У меня есть попытался использовать эти методы: & # xD ; & # xA ; $ (‘[data-role = & Quot ; {страница *.} Quot ;] ‘). триггер (‘ создать «) ; & # хА ; & # хА ; и & # хА ; $ ( ‘[данных роль = & Quot ; страница & {Quot ***}] ‘). страница () ; & # XD ; & # хА { ***} Также как я могу

arr.filter(x => x)

для удаления дыры, нуля, и, undefined:

arr.filter(x => x != null)
arr = [, null, (void 0), 0, -0, NaN, false, '', 42];
console.log(arr.filter(() => true)); // [null, (void 0), 0, -0, NaN, false, '', 42]
console.log(arr.filter(x => x)); // [42]
console.log(arr.filter(x => x != null)); // [0, -0, NaN, false, "", 42]

чистый способ сделать это.

var arr = [0,1,2,"Thomas","false",false,true,null,3,4,undefined,5,"end"];
arr = arr.filter(Boolean);
// [1, 2, "Thomas", "false", true, 3, 4, 5, "end"]

Simple ES6

['a','b','',,,'w','b'].filter(v => v);

Это кодировка HTML. Для этого нет встроенной функции javascript, но вы можете зайти в Google и получить несколько хорошо продуманных.

общего варианта использования есть пара ошибок:

_.without(array, emptyVal, otherEmptyVal);
_.without([1, 2, 1, 0, 3, 1, 4], 0, 1);

С пустой тары:

_.without(['foo', 'bar', '', 'baz', '', '', 'foobar'], '');
--> ["foo", "bar", "baz", "foobar"]

, поэтому ваш код будет работать только после загрузки окна, когда все ресурсы имеют был загружен. В этот момент jQuery ( документация на lodash без Глядя на вывод

, если использование библиотеки является опцией, которая, как я знаю, в underscore.js есть функция compact () http://documentcloud.github.com/underscore/ ‘null’

Вот выдержка из их документации:

Обновление для 2018 года:

Возвращает копию массива со всеми удаленными ложными значениями. В JavaScript false, null, 0, «», undefined и NaN являются ложными.

_. compact ([0, 1, false, 2, », 3]) ;

= & gt ; [1, 2, 3] и метод более новых версий, предположим, что массив находится ниже:

только ES6 @ Alnitak

 const arr = [1,2,3,undefined,4,5,6,undefined,7,8,undefined,undefined,0,9];

простым способом:

 const clearArray = arr.filter( i => i );

Это код, который вам нужно добавить для IE, но фильтрация и функциональное программирование стоят того же.

На самом деле Array.filter работает во всех браузерах, если вы добавите некоторый дополнительный код , Увидеть ниже.

var array = ["","one",0,"",null,0,1,2,4,"two"];

function isempty(x){
if(x!=="")
    return true;
}
var res = array.filter(isempty);
document.writeln(res.toJSONString());
// gives: ["one",0,null,0,1,2,4,"two"]  

Возможно, вам будет проще зацикливаться на вашем массиве и создавать новый массив из элементов, которые вы хотите сохранить из массива, чем пытаться зацикливаться и склеивать, как это было предложено, поскольку изменение длины массива во время его зацикливание может привести к проблемам.

//This prototype is provided by the Mozilla foundation and
//is distributed under the MIT license.
//http://www.ibiblio.org/pub/Linux/LICENSES/mit.license

if (!Array.prototype.filter)
{
  Array.prototype.filter = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var res = new Array();
    var thisp = arguments[1];
    for (var i = 0; i < len; i  )
    {
      if (i in this)
      {
        var val = this[i]; // in case fun mutates this
        if (fun.call(thisp, val, i, this))
          res.push(val);
      }
    }

    return res;
  };
}

Так как никто другой не упомянул об этом, и большинство людей подчеркнули, что в их проект включено подчеркивание, вы также можете использовать _.without(array, *values); Глядя на вывод

_.without(["text", "string", null, null, null, "text"], null)
// => ["text", "string", "text"]

Вы можете сделать что-то вроде этого:

Вы поймете, что у вас могут быть другие типы функций фильтра. Возможно, больше, чем нужно, но я чувствовал себя щедрым … ;)

function removeFalsyElementsFromArray(someArray) {
    var newArray = [];
    for(var index = 0; index < someArray.length; index  ) {
        if(someArray[index]) {
            newArray.push(someArray[index]);
        }
    }
    return newArray;
}

На самом деле вот более общее решение:

function removeElementsFromArray(someArray, filter) {
    var newArray = [];
    for(var index = 0; index < someArray.length; index  ) {
        if(filter(someArray[index]) == false) {
            newArray.push(someArray[index]);
        }
    }
    return newArray;
}

// then provide one or more filter functions that will 
// filter out the elements based on some condition:
function isNullOrUndefined(item) {
    return (item == null || typeof(item) == "undefined");
}

// then call the function like this:
var myArray = [1,2,,3,,3,,,,,,4,,4,,5,,6,,,,];
var results = removeElementsFromArray(myArray, isNullOrUndefined);

// results == [1,2,3,3,4,4,5,6]

Как насчет этого (ES6): удалить значение Falsy из массива.

Я просто добавляю свой голос к вышеупомянутому «вызову ES5

var arr = [0,1,2,"test","false",false,true,null,3,4,undefined,5,"end"];

arr.filter((v) => (!!(v)==true));

//output:

//[1, 2, "test", "false", true, 3, 4, 5, "end"]

, вам следует используйте фильтр, чтобы получить массив без пустых элементов. Пример на ES6

const array = [1, 32, 2, undefined, 3];
const newArray = array.filter(arr => arr);
ES6: let newArr = arr.filter(e => e);

. В частности, ES5 Array..filter() с помощью глобального конструктора ”golf- хак, но я предлагаю использовать Object вывод будет: String, Boolean это использование для Scope, как это делается Number, как предложено выше.

уже не запускает filter() элементов в массиве ;, поэтому функция, которая универсально возвращает { *}, который возвращает undefined элементы true попаданий, обязательно вернет только не все Элементы filter() попадания обязательно вернут только не undefined элементы :

> [1,,5,6,772,5,24,5,'abc',function(){},1,5,,3].filter(function(){return true})
[1, 5, 6, 772, 5, 24, 5, 'abc', function (){}, 1, 5, 3]

Однако запись ...(function(){return true;}) длиннее записи ...(Object) ;, и возвращаемое значение конструктора Object будет при при любых обстоятельствах каким-то образом объект. В отличие от конструкторов примитивного бокса, предложенных выше, никакое возможное значение объекта не является ложным, и поэтому в логическом значении Object является сокращением для function(){return true} Глядя на вывод

> [1,,5,6,772,5,24,5,'abc',function(){},1,5,,3].filter(Object)
[1, 5, 6, 772, 5, 24, 5, 'abc', function (){}, 1, 5, 3]

. При использовании ответа с наибольшим количеством голосов, приведенного выше, в первом примере я был получение отдельных символов для длин строк больше 1. Ниже мое решение этой проблемы.

var stringObject = ["", "some string yay", "", "", "Other string yay"];
stringObject = stringObject.filter(function(n){ return n.length > 0});

Вместо того, чтобы не возвращать, если значение не определено, мы возвращаем, если длина больше 0. Надеюсь, это поможет кому-то там.

Возвращает

["some string yay", "Other string yay"]
var data = [null, 1,2,3];
var r = data.filter(function(i){ return i != null; })

console.log(r) 

[1,2,3]

Как насчет этого:

js> [1,2,,3,,3,,,0,,,4,,4,,5,,6,,,,].filter(String).join(',')
1,2,3,3,0,4,4,5,6

Это работает, я проверял это в AppJet что передача строк в метод разбора, как правило, небезопасна, новый

/* appjet:version 0.1 */
function Joes_remove(someArray) {
    var newArray = [];
    var element;
    for( element in someArray){
        if(someArray[element]!=undefined ) {
            newArray.push(someArray[element]);
        }
    }
    return newArray;
}

var myArray2 = [1,2,,3,,3,,,0,,,4,,4,,5,,6,,,,];

print("Original array:", myArray2);
print("Clenased array:", Joes_remove(myArray2) );
/*
Returns: [1,2,3,3,0,4,4,5,6]
*/

Еще один способ сделать это — воспользоваться преимуществом свойства length массива : упакуйте ненулевые элементы слева от массива, затем уменьшите длину. Это алгоритм на месте — он не выделяет память, что очень плохо для сборщика мусора, и он работает очень хорошо в наилучшем / среднем / худшем случаях.

Это решение по сравнению с другими здесь в 2–50 раз быстрее в Chrome и в 5–50 раз быстрее в Firefox, как вы можете видеть здесь: http://jsperf.com/remove-null-items-from-array

В приведенном ниже коде добавляется не перечисляемый «removeNull» Метод Array, который возвращает ‘this’ для последовательного подключения:

var removeNull = function() {
    var nullCount = 0           ;
    var length    = this.length ;
    for (var i=0, len=this.length; i<len; i  ) { if (!this[i]) {nullCount  } }
    // no item is null
    if (!nullCount) { return this}
    // all items are null
    if (nullCount == length) { this.length = 0; return this }
    // mix of null // non-null
    var idest=0, isrc=length-1;
    length -= nullCount ;                
    while (true) {
         // find a non null (source) slot on the right
         while (!this[isrc])  { isrc--; nullCount--; } 
         if    (!nullCount) { break }       // break if found all null
         // find one null slot on the left (destination)
         while ( this[idest]) { idest    }  
         // perform copy
         this[idest]=this[isrc];
         if (!(--nullCount)) {break}
         idest  ;  isrc --; 
    }
    this.length=length; 
    return this;
};  

Object.defineProperty(Array.prototype, 'removeNull', 
                { value : removeNull, writable : true, configurable : true } ) ;
foo = [0, 1, 2, "", , false, 3, "four", null]

foo.filter(function(e) {
    return e === 0 ? '0' : e
})

Возвращает

[0, 1, 2, 3, "four"]

‘Неправильное использование’ цикла for … in (object-member). = & gt ; В теле цикла отображаются только истинные значения.

// --- Example ----------
var field = [];

field[0] = 'One';
field[1] = 1;
field[3] = true;
field[5] = 43.68;
field[7] = 'theLastElement';
// --- Example ----------

var originalLength;

// Store the length of the array.
originalLength = field.length;

for (var i in field) {
  // Attach the truthy values upon the end of the array. 
  field.push(field[i]);
}

// Delete the original range within the array so that
// only the new elements are preserved.
field.splice(0, originalLength);

Это может вам помочь: https://lodash.com/docs/4.17.4 # remove

var details = [
            {
                reference: 'ref-1',
                description: 'desc-1',
                price: 1
            }, {
                reference: '',
                description: '',
                price: ''
            }, {
                reference: 'ref-2',
                description: 'desc-2',
                price: 200
            }, {
                reference: 'ref-3',
                description: 'desc-3',
                price: 3
            }, {
                reference: '',
                description: '',
                price: ''
            }
        ];

        scope.removeEmptyDetails(details);
        expect(details.length).toEqual(3);

scope.removeEmptyDetails = function(details){
            _.remove(details, function(detail){
                return (_.isEmpty(detail.reference) && _.isEmpty(detail.description) && _.isEmpty(detail.price));
            });
        };
var data= { 
    myAction: function(array){
        return array.filter(function(el){
           return (el !== (undefined || null || ''));
        }).join(" ");
    }
}; 
var string = data.myAction(["I", "am","", "working", "", "on","", "nodejs", "" ]);
console.log(string);

time = & Gt ;

Я работаю над nodejs

Он удалит пустой элемент из массива и отобразить другой элемент.

. Первый набор скобок не требуется, если вы используете имя функции, но безымянная функция требует эту конструкцию, а скобка служит для кодировщиков, чтобы понять, что они просматривали сам Вызов функции при просмотре кода (см. один из блоггеров

array = array.filter(/w/);
filter   regexp

Лучший способ удалить пустые элементы — использовать Array.prototype.filter(), как уже упоминалось в других ответах.

К сожалению, Array.prototype.filter() не поддерживается IE & Lt ; 9. Если вам все еще нужно поддерживать IE8 или даже более старую версию IE, вы можете использовать следующее polyfill Варианта 2 (самый быстрый из всех, кроме Array.prototype.filter() PHP:

if (!Array.prototype.filter) {
  Array.prototype.filter = function(fun/*, thisArg*/) {
    'use strict';
    if (this === void 0 || this === null) {
      throw new TypeError();
    }
    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun !== 'function') {
      throw new TypeError();
    }
    var res = [];
    var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
    for (var i = 0; i < len; i  ) {
      if (i in t) {
        var val = t[i];
        if (fun.call(thisArg, val, i, t)) {
          res.push(val);
        }
      }
    }
    return res;
  };
}

Если кто-то ищет очистку всего массива или объекта, это может помочь Глядя на вывод

var qwerty = {
    test1: null,
    test2: 'somestring',
    test3: 3,
    test4: {},
    test5: {
        foo: "bar"
    },
    test6: "",
    test7: undefined,
    test8: " ",
    test9: true,
    test10: [],
    test11: ["77","88"],
    test12: {
        foo: "foo",
        bar: {
            foo: "q",
            bar: {
                foo:4,
                bar:{}
            }
        },
        bob: {}
    }
}

var asdfg = [,,"", " ", "yyyy", 78, null, undefined,true, {}, {x:6}, [], [2,3,5]];

function clean_data(obj) {
    for (var key in obj) {
        // Delete null, undefined, "", " "
        if (obj[key] === null || obj[key] === undefined || obj[key] === "" || obj[key] === " ") {
            delete obj[key];
        }
        // Delete empty object
        // Note : typeof Array is also object
        if (typeof obj[key] === 'object' && Object.keys(obj[key]).length <= 0) {
            delete obj[key];
        }
        // If non empty object call function again
        if(typeof obj[key] === 'object'){
            clean_data(obj[key]);
        }
    }
    return obj;
}

var objData = clean_data(qwerty);
console.log(objData);
var arrayData = clean_data(asdfg);
console.log(arrayData);

Как сделать первую букву строки заглавной, но не изменить регистр любой другой буквы?

Удаляет все, что является jsfiddle null, undefined, "", " ", empty object или empty array

Эта команда удалит только пустые значения, а не ложные, что, на мой взгляд, более желательно. говорится, что

, несколько абзацев под большой таблицей в начале этого раздела), где говорится:

Как удалить пустые элементы из массива в JavaScript?

Есть ли простой способ, или мне нужно пройти через него и удалить их вручную?

Существует также возможность удалить нулевые значения.

Этот метод должен быть намного быстрее, чем с использованием сплайсинга.

Вот пример использования вариадного поведения & Amp ; Выражение жирной стрелки ES2015:

    function cleanArray(a, removeNull) {
        var i, l, temp = [];
        l = a.length;
        if (removeNull) {
            for (i = 0; i < l; i  ) {
                if (a[i] !== undefined && a[i] !== null) {
                    temp.push(a[i]);
                }
            }
        } else {
            for (i = 0; i < l; i  ) {
                if (a[i] !== undefined) {
                    temp.push(a[i]);
                }
            }
        }
        a.length = 0;
        l = temp.length;
        for (i = 0; i < l; i  ) {
            a[i] = temp[i];
        }
        temp.length = 0;
        return a;
    }
    var myArray = [1, 2, , 3, , 3, , , 0, , null, false, , NaN, '', 4, , 4, , 5, , 6, , , , ];
    cleanArray(myArray);
    myArray;

использовать фильтр для удаления пустой строки в массиве.

var s = [ '1,201,karthikeyan,K201,HELPER,karthikeyan.a@limitlessmobil.com,8248606269,7/14/2017,45680,TN-KAR24,8,800,1000,200,300,Karthikeyan,11/24/2017,Karthikeyan,11/24/2017,AVAILABLEr',
  '' ]
var newArr = s.filter(function(entry) { return entry.trim() != ''; })

console.log(newArr); 

и еще одним способом: заглушка

function filter_array(test_array) {
    var index = -1,
        arr_length = test_array ? test_array.length : 0,
        resIndex = -1,
        result = [];

    while (  index < arr_length) {
        var value = test_array[index];

        if (value) {
            result[  resIndex] = value;
        }
    }

    return result;
}
console.log(filter_array([NaN, 0, 15, false, -22, '',undefined, 47, null]));

Я знаю, что слишком поздно, чтобы написать ответ на этот вопрос, но, тем не менее, я думаю, что он будет полезен всем, кто думает об отправке писем через javascript.

Array.prototype.ReplaceAllValues = function(OldValue,newValue)
{
    for( var i = 0; i < this.length; i   )  
    {
        if( this[i] == OldValue )       
        {
            this[i] = newValue;
        }
    }
};

… или в 1 строке кода: —

Array.prototype.clean = function() {
  var args = [].slice.call(arguments);
  return this.filter(item => args.indexOf(item) === -1);
};

// Usage
var arr = ["", undefined, 3, "yes", undefined, undefined, ""];
arr.clean(undefined); // ["", 3, "yes", ""];
arr.clean(undefined, ""); // [3, "yes"];

Мне нужно было выполнить ту же задачу и наткнуться на эту тему. Я закончил тем, что использовал массив «join» для создания строки с использованием разделителя «_», а затем сделал несколько регулярных выражений, чтобы: —

1. replace "__" or more with just one "_",
2. replace preceding "_" with nothing "" and similarly 
3. replace and ending "_" with nothing ""

… затем использует массив «split» для создания очищенного массива: —

var myArr = new Array("","","a","b","","c","","","","","","","","","e","");
var myStr = "";

myStr = myArr.join("_");

myStr = myStr.replace(new RegExp(/__*/g),"_");
myStr = myStr.replace(new RegExp(/^_/i),"");
myStr = myStr.replace(new RegExp(/_$/i),"");
myArr = myStr.split("_");

alert("myArr="   myArr.join(","));

… или расширение массива object: —

var myArr = new Array("","","a","b","","c","","","","","","","","","e","");

myArr = myArr.join("_").replace(new RegExp(/__*/g),"_").replace(new RegExp(/^_/i),"").replace(new RegExp(/_$/i),"").split("_");

alert("myArr="   myArr.join(","));

… или расширение объекта Array: —

Array.prototype.clean = function() {
  return this.join("_").replace(new RegExp(/__*/g),"_").replace(new RegExp(/^_/i),"").replace(new RegExp(/_$/i),"").split("_");
};

var myArr = new Array("","","a","b","","c","","","","","","","","","e","");

alert("myArr="   myArr.clean().join(","));

Это Еще один способ сделать это:

var arr = ["a", "b", undefined, undefined, "e", undefined, "g", undefined, "i", "", "k"]
var cleanArr = arr.join('.').split(/. /);

Как насчет сделать это таким образом

// Removes all falsy values 
arr = arr.filter(function(array_val) { // creates an anonymous filter func
    var x = Boolean(array_val); // checks if val is null
    return x == true; // returns val to array if not null
  });

, чтобы увидеть некоторые примеры.

function removeEmptyElem(ary) {
    for (var i = ary.length - 1; i >= 0; i--) {
        if (ary[i] == undefined)  {
            ary.splice(i, 1);
        }       
    }
    return ary;
}
Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector