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或空值的键,然后将它们添加到数组中并检查其长度。
我认为它不会被删除。
答案 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]
是一种糟糕的编码习惯。您不应该直接在传入数据中删除属性,因为结果有时可能无法预测,并且在调试阶段会引起很多麻烦。