2014-09-18 64 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();