2017-02-10 168 views
0

我曾經見過類似的問題,但大多數答案都沒有很好的表現。我希望通過使用Angular2或NodeJS來取得這種效果,取而代之的是更好的性能。Angular2或NodeJs:重新排列/排序基於另一個陣列的JSON元素

我有一組用戶水果的喜​​好的ID

{15, 43, 55, 67, 98}; 

我有什麼水果JSON對象超市提供

{"fruits":[ 
    {"Name":"Apple", "ID": 23}, 
    {"Name":"Mango", "ID": 15}, 
    {"Name":"Orange", "ID": 21}, 
    {"Name":"Melon", "ID": 7}, 
    {"Name":"Grapes", "ID": 67}, 
    {"Name":"Berries", "ID": 80}, 
]}; 

我需要有效地重新排列第二列表有什麼存在於列表頂部的第一個數組中,其餘的元素我不關心它們的順序。所以在上面的例子中,結果應該是

{"fruits":[ 
    {"Name":"Mango", "ID": 15}, 
    {"Name":"Grapes", "ID": 67}, 
    {"Name":"Apple", "ID": 23}, 
    {"Name":"Orange", "ID": 21}, 
    {"Name":"Melon", "ID": 7}, 
    {"Name":"Berries", "ID": 80}, 
]}; 

回答

0

這將是一個API請求

[GET] api/fruits?id=5,43,55,67,98 

我要去承擔你的意思是這些ID是一個數組。

let ids = [5, 43, 55, 67, 98]; 

我假設從這個立場來看你從某處查詢。

var data = {"fruits":[ 
    {"Name":"Apple", "ID": 23}, 
    {"Name":"Mango", "ID": 15}, 
    {"Name":"Orange", "ID": 21}, 
    {"Name":"Melon", "ID": 7}, 
    {"Name":"Grapes", "ID": 67}, 
    {"Name":"Berries", "ID": 80}, 
]}; 

更新

var missing = []; 
var result = data.fruits.filter(fruit => keys.indexOf(fruit.ID) > -1 
    ? true : missing.push(fruit) && false); 
result.push(missing); 

return { "fruits": result }; 

這就是你可以在Javascript中查詢。

我建議使用Mongo商店和camelCase作爲你的屬性名稱。

+0

感謝Proximo,你的假設是正確的,但不是隻是過濾它們,只返回常見的水果/ ID?或者將輸出結果與我的帖子一樣,所有的結果,但最常見的結果呢? – kemety

+0

對不起,我錯過了那部分,並假設太多。更新我的答案。 – Proximo