从Array中删除空对象

时间:2016-07-22 08:26:34

标签: javascript jquery arrays underscore.js javascript-objects

我有一个填充了对象的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"}
              ];

我已经使用了来自underscore.js的_.uniq来删除我的数组中的所有重复项,这很正常。虽然它们是唯一的,但是当我动态填充数据时,总是会留下一个空的Object(因为有空的数据集)。我已经尝试过这里提到的_.without函数:Remove empty elements from an array in Javascript但它不起作用。这是我的尝试:

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

数组应如下所示:

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

如果有这个库的解决方案,我也在使用jQuery。

4 个答案:

答案 0 :(得分:3)

你可以试试这个:

_.filter(myArray, _.isEmpty)

我假设空手段

var obj = {}

答案 1 :(得分:1)



// 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 = _.filter(_.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>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

不需要库,只需要Array#filter和一个对象。使用动态过滤,适用于所有属性。

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 3 :(得分:1)

尝试(ECMA5 +):

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