将 Javascript 个数组组合成键值查找
Combining Javascript Arrays into key value look up
我有一个名为 Data 的 Javascript 对象,它看起来像:
Object {
zip: Array[14631],
lat: Array[14631],
lng: Array[14631],
surge: Array[14631]
}
数据看起来像
Zipcode, Lat, Lng, Surge
10025, 47.323, -93.43, 1.7
所以要访问元素,我可以这样做:
data['zip'][i]
并且它将 return zip 数组的 'ith' 元素。
我可以对所有数组执行相同的操作。
我想要的是一个我可以做的数据结构:
data[10025]
并且它将 return 其他数组中的所有匹配元素。
所以假设我有 5 个邮政编码 = 10025 的条目,数据 [10025] 将 return:
10025,lat_1,lng_1,surge_1
10025,lat_2,lng_2,surge_2
10025,lat_3,lng_3,surge_3
10025,lat_4,lng_4,surge_4
10025,lat_5,lng_5,surge_5
这样我就可以对
进行两次迭代
for zip in data['zip']{
for i in data[zip] {
print data[zip]['lats'][i]
}
}
我认为这是一个足够简单的问题,但我对 javascript 没有太多经验,似乎无法理解。非常感谢任何帮助。
另一种表达方式是我想要一个看起来像这样的对象:
data[array size of N]
其中该数组的每个元素包含 3 个大小为 M 的数组
为什么不这样做呢...
data = {
"10025": [
{
"Lat": 47.323,
"Lng": -93.43,
"Surge": 1.7
},{
"Lat": 47.323,
"Lng": -93.43,
"Surge": 1.7
},{
"Lat": 47.323,
"Lng": -93.43,
"Surge": 1.7
}
]
};
然后您可以通过数据["10025"] 访问 zip 并循环遍历位置数组。
var data = {};
for(var i = 0; i < obj.zip.length;i++){
var zip = obj.zip[i]
data[zip] = data[zip] || [];
data[zip].push({
zip: obj.zip[i],
lat: obj.lat[i],
lng: obj.lng[i],
surge: obj.surge[i]
});
}
在不更改原始数据的情况下,您可以将数组的索引用于新数组中的对象,并将邮政编码作为键。
data = {
"10025": [ 2, 4, 7, 10],
"10027": [ 1, 3, 9, 11],
};
使用
生成数据
var data = Object.create(null); // create empty object
object.zip.forEach(function (z, i) {
data[z] = data[z] || [];
data[z].push(i);
});
访问权限为:
data[zip].forEach(function (index) {
// do something with the value ...
var lat = object.lats[index]
});
// Array, keyed by zip code
var zip_array = [];
// Iterate over zip data, building zip_array as we go.
var zip_data = data.zip;
for (var i = 0, len = zip_data.length; i < len; ++i)
{
var current_zip = zip_data[i];
if (zip_array[current_zip]){
zip_array[current_zip].push(getDataAt(i));
}
else {
zip_array[current_zip] = [ getDataAt(i) ];
}
}
function getDataAt (index)
{
return [ data.zip[index], data.lat[index], data.lng[index], data.surge[index]].join(",");
}
我有一个名为 Data 的 Javascript 对象,它看起来像:
Object {
zip: Array[14631],
lat: Array[14631],
lng: Array[14631],
surge: Array[14631]
}
数据看起来像
Zipcode, Lat, Lng, Surge
10025, 47.323, -93.43, 1.7
所以要访问元素,我可以这样做:
data['zip'][i]
并且它将 return zip 数组的 'ith' 元素。
我可以对所有数组执行相同的操作。
我想要的是一个我可以做的数据结构:
data[10025]
并且它将 return 其他数组中的所有匹配元素。
所以假设我有 5 个邮政编码 = 10025 的条目,数据 [10025] 将 return:
10025,lat_1,lng_1,surge_1
10025,lat_2,lng_2,surge_2
10025,lat_3,lng_3,surge_3
10025,lat_4,lng_4,surge_4
10025,lat_5,lng_5,surge_5
这样我就可以对
进行两次迭代for zip in data['zip']{
for i in data[zip] {
print data[zip]['lats'][i]
}
}
我认为这是一个足够简单的问题,但我对 javascript 没有太多经验,似乎无法理解。非常感谢任何帮助。
另一种表达方式是我想要一个看起来像这样的对象:
data[array size of N]
其中该数组的每个元素包含 3 个大小为 M 的数组
为什么不这样做呢...
data = {
"10025": [
{
"Lat": 47.323,
"Lng": -93.43,
"Surge": 1.7
},{
"Lat": 47.323,
"Lng": -93.43,
"Surge": 1.7
},{
"Lat": 47.323,
"Lng": -93.43,
"Surge": 1.7
}
]
};
然后您可以通过数据["10025"] 访问 zip 并循环遍历位置数组。
var data = {};
for(var i = 0; i < obj.zip.length;i++){
var zip = obj.zip[i]
data[zip] = data[zip] || [];
data[zip].push({
zip: obj.zip[i],
lat: obj.lat[i],
lng: obj.lng[i],
surge: obj.surge[i]
});
}
在不更改原始数据的情况下,您可以将数组的索引用于新数组中的对象,并将邮政编码作为键。
data = {
"10025": [ 2, 4, 7, 10],
"10027": [ 1, 3, 9, 11],
};
使用
生成数据var data = Object.create(null); // create empty object
object.zip.forEach(function (z, i) {
data[z] = data[z] || [];
data[z].push(i);
});
访问权限为:
data[zip].forEach(function (index) {
// do something with the value ...
var lat = object.lats[index]
});
// Array, keyed by zip code
var zip_array = [];
// Iterate over zip data, building zip_array as we go.
var zip_data = data.zip;
for (var i = 0, len = zip_data.length; i < len; ++i)
{
var current_zip = zip_data[i];
if (zip_array[current_zip]){
zip_array[current_zip].push(getDataAt(i));
}
else {
zip_array[current_zip] = [ getDataAt(i) ];
}
}
function getDataAt (index)
{
return [ data.zip[index], data.lat[index], data.lng[index], data.surge[index]].join(",");
}