2014-12-11 94 views
0

我有一個模型陣列,我有類型和關鍵。異步NodeJS

models = [{type: 'user', key: getKey('user')},  
    //. 
    //.Many more model objects here 
    //. 
    {type: 'employee', key: getKey('employee')}]; 

在這裏,我的每個模型映射到我的搜索功能,它得到的數據爲每個模型:

async.map(models, search, function (err, results) { 
    if (err) { 
     res.json(400, err); 
    } else { 
     // Here results is an array of arrays of different results for different models and I dont know how to check 
     // how to find different models with the same key and union their results if they have the same key value... 
     var mergedResult = []; 
     mergedResult = mergedResult.concat.apply(mergedResult, results); 
     res.json(200, mergedResult); 
    } 
}); 

,這裏是我的搜索功能,它返回傳遞型號名稱:

function search(model, callback) { 
    getData(model.type, callback); 
} 

所以,現在我得到每個模型(用戶,客戶,...和員工)的結果,但現在我想檢查這些模型是否有相同的關鍵字,我通過getKey(modelName)功能;在我們的例子中可以說用戶和員工的關鍵是相同的,它是「名稱」字段,所以在這種情況下我想結合(如sql中的聯合)員工和用戶的結果: 可以說「用戶「我們得到:

結果用戶模型:

[ 
    { 
     name : "Mike", 
     age: 33 
     eyeColor: "brown" 
    }, 
    { 
     name : "David", 
     age: 35 
    } 
] 

,併爲員工,我們得到:

結果員工型號:

[ 
     { 
      name : "Mike", 
      age: 33, 
      heigh: 178, 
      eyeColor: "black" 
     }, 
     { 
      name : "Nanacy", 
      age: 39 
     } 
    ]  

期望的結果:

[ 
    { 
     name : "Mike", 
     age: 33 
     eyeColor: "brown", 
     heigh: 178 
    }, 
    { 
     name : "David", 
     age: 35 
    }, 
    { 
     name : "Nanacy", 
     age: 39 
    } 
] 

在我的算法,我只是簡單地返回:

我就要回:

[ 
    { 
     name : "Mike", 
     age: 33 
     eyeColor: "brown" 
    }, 
    { 
     name : "David", 
     age: 35 
    }, 
    { 
     name : "Mike", 
     age: 33, 
     heigh: 178, 
     eyeColor: "black" 
    }, 
    { 
     name : "Nanacy", 
     age: 39 
    } 
]  

請讓我知道如果我你需要更多的馴服! 感謝

+1

確實有'async'任何實際問題?如果功能是同步的,你能解決這個問題嗎?如果是這樣,請告訴我們(僞)代碼,它可能比您的文本更容易理解。 – Bergi 2014-12-11 04:10:22

+0

映射通過'Object.keys' /'[]。keys()'代替 – 2014-12-11 04:45:15

+0

@Bergi謝謝你!我想我簡化了我的問題;我希望這更有意義;我只是在尋找與mysql聯盟相同的功能;我的搜索功能是回報每個模型的結果... – user385729 2014-12-11 04:58:32

回答

1

您應該保存key有關的信息,而你有它:

function search(model, next) { 
    var data = getData(model.type, function(err, data){ 
    if (err) return next(err); 
    data['__key'] = data[model.key]; 
    next(null, data) 
    }); 
}