1.起因
var name = [
{ lastName:'王',
firstName:['王维','王安石','王羲之','王昭君']
},
{
lastName:'张',
firstName:['张飞','张学良','张良','张仲景']
},
{
lastName:'李',
firstName:['李白','李清照','李世民','李时珍']
},
{
lastName:'董',
firstName:['董仲舒','董存瑞','董卓','董和',]
}
];
var res = name.filter(function(item){
if(item.lastName=="李")
return item.firstName;
});
console.log(res);
今天在写老师布置的作业时发现的这个问题:
定义了一个储存了4个对象的数组,每个对象里面放的是姓氏及名字。
我想要取出所有姓李的所有的名字。这个代码逻辑上看上去没什么问题,但是当我运行的时候却报错了:
2.经过
name.filter is not a function
name里面没有这个函数???
看到这个错误当时我就懵了,数组里面怎么会没有filter函数呢??
于是我百度搜索了下"xxx.filter is not a function",
网上大多数xxx.filter is not a function的问题说的是xxx为字符串类型,调用filter就会报这个错误。
于是我就纳闷了,我明明定义的就是数组啊,难道写法有问题?
于是我做了个测试:
var name = [
{ lastName:'王',
firstName:['王维','王安石','王羲之','王昭君']
},
{
lastName:'张',
firstName:['张飞','张学良','张良','张仲景']
},
{
lastName:'李',
firstName:['李白','李清照','李世民','李时珍']
},
{
lastName:'董',
firstName:['董仲舒','董存瑞','董卓','董和',]
}
];
var arr = [{},{},{},{}];
console.log(Array.isArray(name));
console.log(Array.isArray(arr));
运行结果:
name不是数组类型,arr是数组类型
3.结果
查资料得知:
“name”是当前窗体:window对象的属性;
写下这篇博客以记录学习js所踩过的坑,以后命名需注意。