首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用平面数组过滤JSON对象

用平面数组过滤JSON对象
EN

Stack Overflow用户
提问于 2016-07-02 14:49:19
回答 3查看 529关注 0票数 3

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

对象{x: Array36159,y: Array36159,年份: Array36159}

小样本为例:

代码语言:javascript
运行
复制
{
    "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数据是数组或键、值对,我可以使用筛选器:

代码语言:javascript
运行
复制
data.filter(function (x) {
    return x.year == 1991
});

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

预期的结果是:

代码语言:javascript
运行
复制
{
    "x": [309339618361.619, 102862032084.12102],
    "y": [13950252.45052416, 1158787.402385158],
    "year": [1991, 1991]
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-02 15:00:38

您可以对属性使用回调和比较以及数组,您需要将筛选器应用到上面。

代码语言:javascript
运行
复制
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);

票数 2
EN

Stack Overflow用户

发布于 2016-07-02 15:04:16

您可以使用reduce()并按要筛选的年份索引添加值。

代码语言:javascript
运行
复制
var obj = {
  "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]
}

var result = obj.year.reduce(function(r, e, i) {
  if (e == 1991) {
    r.x = (r.x || []).concat(obj.x[i]);
    r.y = (r.y || []).concat(obj.y[i]);
    r.year = (r.year || []).concat(obj.year[i])
  }
  return r;
}, {});

console.log(result)

票数 2
EN

Stack Overflow用户

发布于 2016-07-02 15:16:55

只需复制obj并迭代year属性的元素并删除不等于1991的元素。

代码语言:javascript
运行
复制
var obj = {

    x:    [309339618361.619, 102862032084.12102],
    y:    [13950252.45052416, 1158787.402385158],
    year: [1991, 1991]

},

    scan = {};

Object.assign(scan, obj);

for(var i = 0, len = scan.year.length; i < len; i ++) {

    if(scan.year[i] !== 1991) {

        scan.year.splice(i, 1);

    }

}

console.log(scan);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38161363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档