2014-09-18 73 views

回答

11

这是不可能的只是Array.map,你必须筛选器。

var myMap = arr.map(function(e) { 
    return e.id; 
}).filter(function(x) { 
    return typeof x !== 'undefined'; 
}); 

由于ID是始终为字符串,你可以像下面这样做,以及

var myMap = arr.map(function(e) { 
    return 'id' in e ? e.id : false; 
}).filter(Boolean); 

FIDDLE

+0

感谢'Boolean'例子。 – 2015-01-28 11:46:04

2
var myMap = arr.filter(function(e) { 
     return e.hasOwnProperty("id") 
    }).map(function(e) { 
    return e.hasOwnProperty("id") ? e.id : null; 
}); 

http://jsfiddle.net/Lnmj0w8k/11/

0

正如其他人所说,如果你坚持纯jQuery的你唯一的选择是合并您的mapfilter,或者自行后处理地图结果。

不过,如果你与流行Underscore.js库结合jQuery的,问题就变得微不足道感谢下划线的紧凑方法:

var myMap = arr.map(function(e) { 
    return e.id; 
}); 
myMap = _(myMap).compact(); 

但是如果你使用下划线,有一个更简单的方法做同样的的事情,因为有下划线的方法专门用于从对象中提取一定的属性:

var myMap = _(arr).pluck('id'); 
myMap = _(myMap).compact(); 

你甚至可以链上的两个在一起:

var myMap = _(arr).chain().pluck('id').compact().value(); 

,或者你可以在下划线油脂库扔得到什么,我认为是最简单可行的解决方案:

var myMap = _(arr).pluck_('id').compact();