我有带有数组对的JSON对象,如下所示:



以小样本为例:

{
    "x": [309339618361.619, 102862032084.12102, 72892839276.09761, 46463392384.54194, -39360182208.042145],
    "y": [13950252.45052416, 1158787.402385158, -4368238.261400843, 1339913.7393283844, 2085336.6277048483],
    "year": [1991, 1991, 1992, 1992, 1992]
}

我想按年份过滤此对象。如果JSON数据是数组或键,值对,则可以使用过滤器:
data.filter(function (x) {
    return x.year == 1991
});

但是由于JSON结构是一对平面数组,因此我不知道该如何处理。

所需的结果是这样的:
{
    "x": [309339618361.619, 102862032084.12102],
    "y": [13950252.45052416, 1158787.402385158],
    "year": [1991, 1991]
}

最佳答案

您可以使用带有比较的回调和用于属性的数组,您要在其上应用过滤器。

var object = {
        "x": [309339618361.619, 102862032084.12102, 72892839276.09761, 46463392384.54194, -39360182208.042145],
        "y": [13950252.45052416, 1158787.402385158, -4368238.261400843, 1339913.7393283844, 2085336.6277048483],
        "year": [1991, 1991, 1992, 1992, 1992]
    },
    result = {};

['x', 'y', 'year'].forEach(function (p) {
    result[p] = object[p].filter(function (a, i) {
        return object.year[i] === 1991;
    });
});

console.log(result);

10-08 06:49