這是一個回調(稍微修改/簡化爲這個問題的目的)我已經寫了處理一些對象數據。展平嵌套回調
function (err, data) {
var rv;
if (data && data.result instanceof Array) {
rv = data.result.map(function (value) {
if (value && value.track_contributions instanceof Array) {
return value.track_contributions.map(function (innerValue) {
if (innerValue && innerValue.track) {
return innerValue.track.mid;
}
});
}
});
// flatten nested arrays
rv = [].concat.apply([], rv);
}
console.log(rv);
};
這裏是說我處理看起來像對象:
{
"result": [
{
"type": "/music/artist",
"track_contributions": [
{
"track": {
"mid": "/m/015rm3l"
}
},
{
"track": {
"mid": "/m/0nm2km"
}
},
{
"track": {
"mid": "/m/010ksbq"
}
},
...
]
}
]
}
而且我想從我的回調返回值,看起來像這樣:
[ '/m/015rm3l',
'/m/0nm2km',
'/m/010ksbq',
...
]
我的代碼工作很好,但我覺得所有的嵌套都是代碼味道。
我應該如何讓這種類型的代碼更平坦,更具可讀性和可維護性,以及所有優秀的東西?承諾?一些lodash類型的工具?還有別的嗎?上述所有的?
如果'map'函數中的條件不成立,這種方法會導致很多'undefined'值。因爲在這些情況下,沒有任何東西會返回。 – Amberlamps 2014-11-20 22:51:56
@Amberlamps這是正確的。我的代碼期望這一點。但是,值得注意! – Trott 2014-11-20 22:56:21