首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从javascript中的数组生成多级对象

从javascript中的数组生成多级对象
EN

Stack Overflow用户
提问于 2015-06-17 11:27:34
回答 2查看 83关注 0票数 4

我有一个事件数组,我想在这些数组的对象之间建立关系。阵列:

代码语言:javascript
复制
[{
    'area': 'punjab',
    'site': 'lahore',
    'link': 'http: //lahore.com'
}, {
    'area': 'punjab',
    'site': 'sargodha',
    'link': 'http: //sargodha.com'
}, {
    'area': 'punjab',
    'site': 'multan',
    'link': 'http: //multan.com'
} {
    'area': 'sindh',
    'site': 'karachi',
    'link': 'http: //karachi.com'
}]

我想让这段关系像

代码语言:javascript
复制
 {
  "area": "punjab",
  "site": [
    {
      "name": "lahore",
      "link": [
        {
          "name": "http://sargodha.com",
        }
      ]
    },
   {
      "name": "sargodha",
      "link": [
        {
          "name": "http://sargodha.com",
        }
      ]
    }
  ]
},
{
  "area": "sindh",
  "site": [
    {
      "name": "karachi",
      "link": [
        {
          "name": "http://karachi.com",
        }
      ]
    }
}

这是我写的代码:

代码语言:javascript
复制
    function isinarrayfilters(matchingObject, targetArray, key) {
    var existindex = -1;
    $.each(targetArray, function(index, array) {
        if (array.key == matchingObject.key) {
            //Object exist in array
            existindex = index;
        }
    });
    return existindex;
}

generatedRelationArray = [];
        $.each(alertsJson, function(index, alertJson) {
            inarrayindex = isinarrayfilters(alertJson.area, relationArray,'area');
            if (inarrayindex == -1) {
                key = alertJson.site
                generatedsites = {
                    "area": alertJson.area,
                    "site": []
                }
                relationArray.push(generatedsites);
            }
        });

任何人都会指导我如何将网站附加到相关区域。

  • 我必须再次运行循环,并尝试检查exist方法并获取索引,并将站点推入其中?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-17 11:43:05

保留格式的答案:

代码语言:javascript
复制
var generate = function(list) {
  var resultList = [];
  var tmpStoreRef = {};

  $.each(list, function(id, item) {
    var area = item.area
        ,site = item.site
        ,link = item.link;
    if (typeof tmpStoreRef[area] === 'undefined') {
      tmpStoreRef[area] = {
        area: area,
        site: []
      }
      resultList.push(tmpStoreRef[area]);
    }
    tmpStoreRef[area].site.push({
      name: site,
      link: link
    });
  });

  return resultList;
};
票数 2
EN

Stack Overflow用户

发布于 2015-06-17 11:40:35

您可以使用查询-js完成这一任务。

假设原始数组存储在data

代码语言:javascript
复制
var res = data.groupBy(function(e){ return e.area; });

这将产生一个稍微不同的结构:

代码语言:javascript
复制
{
  "punjab" : [{
     'area': 'punjab',
     'site': 'lahore',
     'link': 'http: //lahore.com'
   }, {
     'area': 'punjab',
     'site': 'sargodha',
     'link': 'http: //sargodha.com'
   }, {
     'area': 'punjab',
     'site': 'multan',
     'link': 'http: //multan.com'
  }],
 "sindh": [...]
}

如果您需要这个显式结构,那么您可以这样做。

代码语言:javascript
复制
var res = data.groupBy(function(e){ return e.area; })
              .each(function(e){
                  return {
                           area : e.key,
                           site : e.value.select(function(e){
                                return {
                                     name : e.site,
                                     linkm : [e.link]
                                };
                           });
              });

我创建了一个帖子,它应该解释什么是查询-js以及如何使用它

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

https://stackoverflow.com/questions/30890216

复制
相关文章

相似问题

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