仅使用Array.prototype返回数组数据而不返回函数本身

时间:2014-12-29 20:45:08

标签: javascript arrays extend

我正在编写一个函数来进行一些数据过滤。我写这个:

Array.prototype.keyFilter = function ()
{
    var dta = this;

    for ( i in dta )
    {
        console.log( dta[i] );
    };
};

console.log( ['green','yellow','blue'].keyFilter('type') );

回报是:

green
yellow
blue
function ()
    {
        var dta = this;

        for ( i in dta )
        {
            console.log( dta[i] );
        };
    }
undefined

好的,我得到了数组数据......加上函数本身和" undefined"。如何使用Array.prototype只获取数组数据

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您正在使用for...in,它会迭代对象的可枚举属性,包括您已添加到原型中的函数。那是expressly not how you're meant to iterate over arrays

如果要迭代数组,则应使用简单的for循环,并从0计算到length - 1 ...

for (var i = 0; i < this.length; ++i) {
  console.log(this[i]);
}

或者,使用forEach

this.forEach(function (i) {
  console.log(i);
});

&#34; undefined&#34; part是你的外部console.log(...)记录你的函数的返回值,即undefined,因为你不会返回任何内容。