Удалить пустые объекты из массива

У меня есть JavaScript-массив с заполненными объектами и я хочу удалить каждый объект без данных. Это может выглядеть так:

var myArray = [ {id: "28b", text:"Phill"},
                {id: "12c", text:"Peter"},
                {id: "43f", text:"Ashley"},
                {id: "43f", text:"Ashley"},
                {id: "", text:""},
                {id: "9a", text:"James"},
                {id: "", text:""},
                {id: "28b", text:"Phill"}
              ];

Я уже пользуюсь_.uniq из underscore.js, чтобы удалить все дубликаты из моего массива, который работает нормально. Хотя они уникальны, один пустой объект всегда остается, когда я динамически заполняю данные (потому что есть пустые наборы данных). Я уже попробовал_.without функция, как указано здесь:Удалить пустые элементы из массива в Javascript но это не работает Вот моя попытка:

myArray = _.without(myArray, {id:"",text:""});

Массив должен выглядеть так:

              [ {id: "28b", text:"Phill"},
                {id: "12c", text:"Peter"},
                {id: "43f", text:"Ashley"},
                {id: "9a", text:"James"},
 ,             ];

Я также использую jQuery, если есть решение с этой библиотекой.

 A. Wolff22 июл. 2016 г., 10:28
{id:"",text:""} не пустой объект Если вы хотите удалить это событие, отфильтруйте его. И я думаю, наконец, что вы хотите, чтобы удалить любой объект, который не имеетid указанный
 Nina Scholz22 июл. 2016 г., 10:28
что значитпустой? пожалуйста, добавьте еще немного данных и что следует удалить.

Ответы на вопрос(4)

Вы можете попробовать это:

_.filter(myArray, _.isEmpty)

Я предполагаю пустое средство

var obj = {}
 Callum Linington22 июл. 2016 г., 10:30
Я просто имел в виду, как это будет только удалить пустой? это также удалит ноль или неопределенный?
 Callum Linington22 июл. 2016 г., 10:32
 adelriosantiago24 нояб. 2017 г., 05:00
Разве ОП не ищет обратную функцию?_.filter(myArray, _.isEmpty) оставит только пустые объекты,_.reject(myArray, _.isEmpty) оставят только непустые объекты.
 Callum Linington22 июл. 2016 г., 10:29
было бы безопаснее сделать!obj || _.isEmpty(obj)
 Oskar Szura22 июл. 2016 г., 10:32
lodash.com/docs#isEmpty - _.isEmpty (undefined) = true, _.isEmpty (null) = true - я думаю, этого достаточно
 Oskar Szura22 июл. 2016 г., 10:30
Мне нравится более декларативный подход - дело вкуса, я думаю
Решение Вопроса

// Code goes here

myArray = [{
    id: "28b",
    text: "Phill"
  }, {
    id: "12c",
    text: "Peter"
  }, {
    id: "43f",
    text: "Ashley"
  }, {
    id: "43f",
    text: "Ashley"
  }, {
    id: "",
    text: ""
  }, {
    id: "9a",
    text: "James"
  }, {
    id: "",
    text: ""
  }, {
    id: "28b",
    text: "Phill"
  }

]

var result = _..uniq(myArray, function(item, key, a) {
  return item.id;
}), function(element) {
  return element.id && element.text
});
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

 Jandroide22 июл. 2016 г., 10:52
работает без нареканий, спасибо! :)

попробуй (ECMA5 +):

var myArrayFiltered = myArray.filter((ele) => {
  return ele.constructor === Object && Object.keys(ele).length > 0
});

Array#filter и объект. С динамической фильтрацией, для всех свойств.

var myArray = [{ id: "28b", text: "Phill" }, { id: "12c", text: "Peter" }, { id: "43f", text: "Ashley" }, { id: "43f", text: "Ashley" }, { id: "", text: "" }, { id: "9a", text: "James" }, { id: "", text: "" }, { id: "28b", text: "Phill" }],
    filtered = myArray.filter(function (a) {
        var temp = Object.keys(a).map(function (k) { return a[k]; }),
            k = temp.join('|');

        if (!this[k] && temp.join('')) {
            this[k] = true;
            return true;
        }
    }, Object.create(null));

console.log(filtered);

 Jandroide22 июл. 2016 г., 11:31
Я очень ценю вашу помощь, но дубликаты все еще остаются
 Nina Scholz22 июл. 2016 г., 11:27
@Jandroide, см. Редактирование.
 Jandroide22 июл. 2016 г., 11:08
Pure js - даже лучшее решение, чем с underscore.js, спасибо за это! Также есть функция короткого фильтра для удаления всех дубликатов, чтобы мне вообще не приходилось использовать underscore.js-функции?

Ваш ответ на вопрос