在NodeJS中对文档数组进行过滤和排序

时间:2019-06-17 19:14:28

标签: javascript node.js

我有一个数组,其中保存有关可用性的信息以及有关产品的其他一些信息。与其返回数组中的所有数据,我只想返回avail = true的数组中的文档,然后返回按id排序的所有文档。

[
    {
        "id": 5,
        "avail": true,
        "name": "product A",
        "qty": 18
    }, {
        "id": 9,
        "avail": false,
        "name": "product B",
        "qty": 0
    }, {
        "id": 7,
        "avail": true,
        "name": "product C",
        "qty": 3
    }, {
        "id": 1,
        "avail": true,
        "name": "product D",
        "qty": 47
    }, {
        "id": 4,
        "avail": false,
        "name": "product E",
        "qty": 0
    }
]

4 个答案:

答案 0 :(得分:2)

const result = original.filter(x => x.avail);
result.sort((a, b) => a.id - b.id);

答案 1 :(得分:1)

首先,您可以通过在数据数组上调用Array.prototype.filter来仅获取具有avail: true的记录。接下来,使用Array.prototype.sort对这些结果进行排序,并比较每个数组元素的id值。

这是一个例子:

const getAvailableProducts = allProducts => allProducts.filter(el => el.avail).sort((a, b) => a.id - b.id);

const available = getAvailableProducts([{
  "id": 5,
  "avail": true,
  "name": "product A",
  "qty": 18
}, {
  "id": 9,
  "avail": false,
  "name": "product B",
  "qty": 0
}, {
  "id": 7,
  "avail": true,
  "name": "product C",
  "qty": 3
}, {
  "id": 1,
  "avail": true,
  "name": "product D",
  "qty": 47
}, {
  "id": 4,
  "avail": false,
  "name": "product E",
  "qty": 0
}]);

console.log('The following products are available:');
console.log(available);

答案 2 :(得分:1)

您可以使用filtersort来完成此操作:

var arr = [
    {
        "id": 5,
        "avail": true,
        "name": "product A",
        "qty": 18
    }, {
        "id": 9,
        "avail": false,
        "name": "product B",
        "qty": 0
    }, {
        "id": 7,
        "avail": true,
        "name": "product C",
        "qty": 3
    }, {
        "id": 1,
        "avail": true,
        "name": "product D",
        "qty": 47
    }, {
        "id": 4,
        "avail": false,
        "name": "product E",
        "qty": 0
    }
];

var newArr = arr.filter(a => {
    return a.avail;
}).sort((a, b) => {
    return a.id > b.id;
});

console.log(newArr)

答案 3 :(得分:0)

const data = [{
  "id": 5,
  "avail": true,
  "name": "product A",
  "qty": 18
}, {
  "id": 9,
  "avail": false,
  "name": "product B",
  "qty": 0
}, {
  "id": 7,
  "avail": true,
  "name": "product C",
  "qty": 3
}, {
  "id": 1,
  "avail": true,
  "name": "product D",
  "qty": 47
}, {
  "id": 4,
  "avail": false,
  "name": "product E",
  "qty": 0
}];

const filteredData = data.filter(x => x.avail).sort((a, b) => a.id - b.id);
console.log(filteredData);