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

Deleting the keys in an array of object and checking its length

本文关键字:检查 对象 数组 删除      更新时间:2023-09-26
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或空白值的键,然后将它们添加到数组中并检查其长度。

在第一个循环中,您正在检查"prop"是否为null或(不正确地)空字符串,但这实际上没有意义。你应该检查"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);
        }
    }

为什么要删除密钥....

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]是一个不好的编码实践。您不应该直接删除传入数据中的属性,因为这样做的结果有时是不可预测的,并且会在调试阶段引起很多麻烦。