2016-09-06 61 views
-3

创建关联多维数组对象我有一个数据库表3列:如何在JavaScript

id | city  | area   | 
--------------------------------------   
2000 | Paris  | City center | 
2010 | Barcelona | Las Ramblas | 
2030 | Madrid  | City center | 
2400 | Paris  | City center | 
3600 | Barcelona | City center | 
3670 | Madrid  | City center | 
5000 | Paris  | Eiffel tower | 
7000 | Paris  | Eiffel tower | 
1000 | Barcelona | Las Ramblas | 
2500 | Madrid  | city center | 

值在id柱是独一无二的!
据我试图在属于下城区得到每个区域的表:

$scope.cities = [ 
    { 
     name: "city_1", 
     areas: [ 
      {name: "area_1"}, 
      {name: "area_2"} 
     ] 
    }, 
    { 
     name: "city_2", 
     areas: [ 
      {name: "area_1"}, 
      {name: "area_2"}, 
      {name: "area_3"} 
     ] 
    }, 
    { 
     name: "city_3", 
     areas: [ 
      {name: "area_1"} 
     ] 
    } 
]; 

我已经要求添加JSON输出,在这儿呢。

[{ 
    "id": "2000", 
    "city": "Paris", 
    "cityArea": "City center" 
}, { 
    "id": "2010", 
    "city": "Barcelona", 
    "cityArea": "Las Ramblas" 
}, { 
    "id": "2030", 
    "city": "Madrid", 
    "cityArea": "City center" 
}, { 
    "id": "2400", 
    "city": "Paris", 
    "cityArea": "City center" 
}, { 
    "id": "3600", 
    "city": "Barcelona", 
    "cityArea": "City center" 
}, { 
    "id": "3670", 
    "city": "Madrid", 
    "cityArea": "City center" 
}, { 
    "id": "5000", 
    "city": "Paris", 
    "cityArea": "Eiffel tower" 
}, { 
    "id": "7000", 
    "city": "Paris", 
    "cityArea": "Eiffel tower" 
}, { 
    "id": "1000", 
    "city": "Barcelona", 
    "cityArea": "Las Ramblas" 
}, { 
    "id": "2500", 
    "city": "Madrid", 
    "cityArea": "city center" 
}] 

我已经尝试过:

var duplicatedCities = []; 
for(var i=0; i<$scope.results.length; i++) { 
    duplicatedCities.push($scope.results[i].city); 
} 

//output 
// ["Paris","Barcelona","Madrid","Paris","Barcelona","Madrid","Paris","Paris","Barcelona","Madrid"]; 

var uniqueCities = [];   
uniqueCities.push(duplicatedCities.filter(function(elem, index, self) { 
    return index == self.indexOf(elem); 
})); 

//output 
//["Paris","Barcelona","Madrid"]; 

,但现在什么?

+0

[创建与多维数组的多维对象(http://stackoverflow.com/questions/11648586/create-multidimensional-object-with-multidimentional-arrays) – Tibrogargan

+0

声音的可能的复制像一个挑战。你有尝试过什么吗?你如何从数据库表中获取数据到JavaScript? –

+0

你得到一个json字符串,并且想要按照描述创建'$ scope.cities'。对?然后提供该json。 –

回答

0

function GetNamedObj(arr, name) { 
 
    
 
     for (var i = 0; i < arr.length; i++) { 
 
      if (arr[i]["name"].toUpperCase() == name.toUpperCase()) { 
 
       return arr[i]; 
 
      } 
 
     } 
 
     // will return undefined if not found  
 
    } 
 
    
 
    function getCities(json) { 
 
     var data = JSON.parse(json); 
 
     var cities = []; 
 
    
 
     for (var i = 0; i < data.length; i++) { 
 
      var city = GetNamedObj(cities, data[i].city); 
 
      if (city) { 
 

 
       if (GetNamedObj(city.areas, data[i].cityArea)) continue; 
 
       var area = { 
 
        name: data[i].cityArea 
 
       }; 
 
       city.areas.push(area); 
 
      } 
 
      else { 
 
       var newCity = { 
 
        name: data[i].city, 
 
        areas: [{ 
 
         name: data[i].cityArea 
 
        }] 
 
       }; 
 
       cities.push(newCity); 
 
      } 
 
     } 
 
    
 
     return cities; 
 
    } 
 

 

 
    var cities = getCities("[{ \"id\": \"2000\", \"city\": \"Paris\", \"cityArea\": \"City center\"}, { \"id\": \"2010\", \"city\": \"Barcelona\", \"cityArea\": \"Las Ramblas\"}, { \"id\": \"2030\", \"city\": \"Madrid\", \"cityArea\": \"City center\"}, { \"id\": \"2400\", \"city\": \"Paris\", \"cityArea\": \"City center\"}, { \"id\": \"3600\", \"city\": \"Barcelona\", \"cityArea\": \"City center\"}, { \"id\": \"3670\", \"city\": \"Madrid\", \"cityArea\": \"City center\"}, { \"id\": \"5000\", \"city\": \"Paris\", \"cityArea\": \"Eiffel tower\"}, { \"id\": \"7000\", \"city\": \"Paris\", \"cityArea\": \"Eiffel tower\"}, { \"id\": \"1000\", \"city\": \"Barcelona\", \"cityArea\": \"Las Ramblas\"}, { \"id\": \"2500\", \"city\": \"Madrid\", \"cityArea\": \"city center\"}]"); 
 

 
console.log(cities);

+0

哇,谢谢!!只有一件事,为什么城市名称仍然重复? – Paco

+0

城市不重复,但城市地区是。我没有阻止它,因为在这个问题上你已经允许重复的城市区域 –

+0

非常感谢你!我会检查的。 – Paco

-1

最简单的方式,利用城市作为键:

foo = {}; 
foo['Paris'] = {}; 
foo['Paris'].areas = ['area1', 'area2']; 

如果你可能会得到重复的城市名称,例如“新福堡”存在于多个国家,只需添加上述任何必要的州/国家/大陆/行星/星系/宇宙键来区分。

使用名称作为键可以非常容易地在对象/数组中找到某些东西 - 只需直接访问它即可。如果您开始将名称作为值来掩埋,那么您可以查看整个结构以找到它隐藏的位置。

+2

@hagay请记住,堆栈溢出不是一个代码写入服务。 –