使用lodash find推送到数组时按值排序对象

时间:2016-09-09 09:33:37

标签: javascript arrays sorting object lodash

我使用api返回一个对象'结果'。结果' object包含具有类型文章或细节的其他对象。

结果(文章或细节)中的每一个都包含自己的对象结果,其中包含该类型的不同页面。

我想做什么:将结果存储在数组'页面'我首先通过所有文章订购它们然后所有细节

我想在数组中对它们进行排序,因为我需要先显示文章,然后再显示前端的详细信息页面。

var pages = [];

_.find(results, function(r) {
    if(r.type === 'article') {
        _.forEach(r.results, function(p) {
            p.type = 'article';
            pages.push(r);
        });
    } else if(r.app === 'detail') {
        _.forEach(r.results, function(p) {
            p.type = 'detail';
            pages.push(p);
        });
    }
});

这是我在Lodash找到的尝试,但在前端我仍然有结果,其中的细节显示在文章之后。

注意:api结果可以是这样的:{detail},{article},但也喜欢这个{detail},{article},{detail},{article}

示例数据:

results: [
    {
        type: 'article',
        results: {
            {
                title: '',
                body: '',
                ...
            },
            ...
        }
    },
    {
        type: 'detail',
        results: {
            {
                title: '',
                body: '',
                ...
            },
            ...
        }
    },
    ...
]

1 个答案:

答案 0 :(得分:1)

经过长时间的讨论:



var sorted;
var articles = [];
var details = [];

var source = [{
  app: "article",
  results: [
    { title: "a" },
    { title: "b" },
    { title: "c" }
  ]
}, {
  app: "detail",
  results: [
    { title: "d" },
    { title: "e" },
    { title: "f" }
  ]
}, {
  app: "article",
  results: [
    { title: "g" },
    { title: "h" },
    { title: "i" }
  ]
}];

for (var i = 0; i < source.length; i++) {
  switch (source[i].app) {
    case "article": articles = articles.concat(source[i].results); break;
    case "detail": details = details.concat(source[i].results); break;
  }
}

sorted = articles.concat(details);
console.log("articles =", JSON.stringify(articles));
console.log("details =", JSON.stringify(details));
console.log("sorted =", JSON.stringify(sorted));
console.log("source =", JSON.stringify(source));
&#13;
&#13;
&#13;