【问题标题】:Angular2 or NodeJs: Rearrange/Sort JSON elements based on another arrayAngular2 或 NodeJs:基于另一个数组重新排列/排序 JSON 元素
【发布时间】:2017-02-11 12:06:32
【问题描述】:

我看到过类似的问题,但大多数答案都没有很好的表现。我想使用 Angular2 或 NodeJS 来实现这一点,无论哪个性能更好。

我有一组用户水果偏好的 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},
]};

【问题讨论】:

    标签: javascript json node.js angular


    【解决方案1】:

    这将是一个 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 作为您的属性名称。

    【讨论】:

    • 感谢 Proximo,您的假设是正确的,但这不只是过滤它们并仅返回常见的水果/ID吗?或者输出会像我的帖子一样,除了顶部的常见水果之外的所有水果?
    • 很抱歉,我错过了那部分并且假设太多。更新我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 2019-04-25
    • 2014-10-25
    • 2019-05-02
    • 2017-06-24
    相关资源
    最近更新 更多