删除对象数组中的键并检查其长度

时间:2011-07-17 15:07:59

标签: javascript

var uniqueProperties = [];    
for (var i = 0, length = obj.length; i < length; i++) {
        for (var prop in obj[i]) {
            if (prop == null || prop == ' ') {
                delete obj[i][prop];
            }
        }
        for (var prop in obj[i]) {
            if (this.uniqueProperties.indexOf(prop) === -1) {
                this.uniqueProperties.push(prop);
            }
        }

    }

我想首先删除带有null或空值的键,然后将它们添加到数组中并检查其长度。

我认为它不会被删除。

2 个答案:

答案 0 :(得分:1)

在第一个循环中,您正在检查“prop”是否为空或(错误地)为空字符串,但这并不是真的有意义。您应该检查“obj [i]”属性的

    if (obj[i][prop] == null || obj[i][prop] == '')
      delete obj[i][prop];

此外,您的“uniqeProperties”列表也应该由单独的对象“辅助”,以便您可以避免重复线性扫描的不良算法性能:

    var uniqueProperties = [], uniqueMap = {};

    // ...

    for (var prop in obj[i]) {
        if (!this.uniqueMap[prop]) {
            this.uniqueMap[prop] = true;
            uniqueProperties.push(prop);
        }
    }

答案 1 :(得分:0)

为什么要删除键....

for (var key in object) {

    if (!object.hasOwnProperty(key)) {
        continue;
    } //to skip inherited properties
    if (!key[object]) {
        continue;
    } //skip null or blank values
}

delete obj[i][propertyName]是一种糟糕的编码习惯。您不应该直接在传入数据中删除属性,因为结果有时可能无法预测,并且在调试阶段会引起很多麻烦。

相关问题