2017-02-10 122 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