如何过滤掉对象数组中的空条目?

时间:2016-01-10 19:43:26

标签: javascript object filter

我只是在学习JavaScript,我试图在Mozilla上理解这个filter()的例子,但我不明白这个例子是如何工作的,因为当我尝试做同样的事情时在我的例子中,它只返回一个空数组。

以下是链接中的示例:

var arr = [
  { id: 15 },
  { id: -1 },
  { id: 0 },
  { id: 3 },
  { id: 12.2 },
  { },
  { id: null },
  { id: NaN },
  { id: 'undefined' }
];

var invalidEntries = 0;

function filterByID(obj) {
  if ('id' in obj && typeof(obj.id) === 'number' && !isNaN(obj.id)) {
    return true; // <--- WHY? 
  } else {
    invalidEntries++;
    return false;
  }
}

var arrByID = arr.filter(filterByID);

console.log('Filtered Array\n', arrByID); 
// Filtered Array
// [{ id: 15 }, { id: -1 }, { id: 0 }, { id: 3 }, { id: 12.2 }]

console.log('Number of Invalid Entries = ', invalidEntries); 
// 4

这是我的例子:

obj = [{0: 31}, {1: null}, {2: null}, {3, 28}]

function isNotNull(obj) {
    for (var prop in obj) {
        if (obj.prop != null) {
            return true;
        }
    } 
}

console.log(ages.filter(isNotNull)) // -> []

3 个答案:

答案 0 :(得分:0)

引用您链接的页面:

  

回调用于测试数组中每个元素的函数。用。调用   arguments(元素,索引,数组)。返回true以保留元素,   否则就是假的。

答案 1 :(得分:0)

false作为返回值意味着将在结果集中接受该对象。 CCParticleSystemQuad表示它被视为无效。

答案 2 :(得分:0)

您需要使用数组语法来动态查找属性:

ages = [{0: 31}, {1: null}, {2: null}, {3: 28}]

    function isNotNull(obj) {
        for (var prop in obj) {
            if (obj[prop] != null) {
                return true;
            }
        } 
    }

    console.log(ages.filter(isNotNull)) // -> [{"0":31},{"3":28}]

请注意obj[prop]而不是obj.prop