以下是我们的内容:
var MyObject = function(){
var contents = [undefined,2,undefined,4,5];
this.getContents = function(){
return contents;
}
}
var o = new MyObject();
根据您的理解,o.getContents()
的值为[undefined,2,undefined,4,5]
我想要做的是删除该私有数组的未定义值,而不覆盖整个数组,而不使公共私有contents
,并且一般不更改对象代码。
答案 0 :(得分:2)
return contents.filter(function(e) {return e});
此filter
方法会在从输入数组中删除""
,null
,undefined
和0
值时创建新数组。
答案 1 :(得分:1)
回答我自己的问题,这就是我采用的方法:
var MyObject = function(){
var contents = [undefined,2,undefined,4,5];
this.getContents = function(){
return contents;
}
}
// Not extending the Array prototype is always a good idea
var reIndex = function(){
for(var i = 0; i < this.length; i++)
{
//Remove this element from the array
if(this[i] === undefined){
this.splice(i, 1);
}
}
}
var o = new MyObject();
console.log(o.getContents()); //[undefined, 2, undefined, 4, 5]
reIndex.call(o.getContents());
console.log(o.getContents()); //[2, 4, 5]
实例here