所以我有这个项目,我正在从网络套接字收集位置数据。我需要找出哪个大陆的命中率最高。因此,为了做到这一点,我将遍历每个位置对象。现在这是我卡住的部分...生成动态数组并在每次位置对象具有该特定大陆时添加命中值的最佳方法是什么。
最初我有一个 switch 语句,其中预定义了大陆并检查大陆名称是否存在,如果存在,那么它会增加该大陆的值。现在,我想使位置名称动态化,这使我的 switch 语句停止工作。
好的,这是我到目前为止的思考过程...一种方法可能是:创建一个空数组(假设 continentArray),获取大陆名称,检查大陆名称是否存在于continentArray中,如果存在,则在 continentArray 中增加该大陆的值。如果不存在,请创建新的数组元素(在 continentArray 中)并递增该值。
然后下一部分是在 3 x 2 列中显示这些数据(HTML5 - 使用 Bootstrap)。我想我可以给每个div 标头一个 id(比如 rank1-5),然后每个列内容一个单独的 id(比如 rankCont1-5),并根据每个数组键和值填充每个部分。
这是最好的方法吗?...创建一个对象而不是数组会更好吗?
我看到这篇文章,并认为必须有一种方法可以做类似的事情:如何在javascript中"搜索"数组数组?
数据对象的示例如下:
{
"country" : "US",
"continent" : "North America"
}
所以这是我到目前为止的代码:
var contArr = [];
socket.on('data', function(data)
{
//iterate through the socket data
for(var i=0;i<data.length;++i){
//define each iteration as item
var item = data[i];
//get current continent name
var continent = item.continent;
if (contArr[i] instanceof Array){
contArr[i]['val']++;
console.log(contArr[i]['val']);
}
else{
contArr[i] = continent;
contArr[i]['val'] = 1;
console.log(contArr[i]['val']);
}
}
});
现在它说val是未定义的,这是有道理的。我只是不确定你是如何正确地做到这一点的...
有什么建议吗?...
谢谢!
如果你想将信息存储在一个对象中,代码是非常干净的。
var contHits = {};
socket.on('data', function(data)
{
//iterate through the socket data
for(var i=0;i<data.length;++i){
//define each iteration as item
var item = data[i];
//get current continent name
var continent = item.continent;
continent in contHits ? contHits[continent]++ : contHits[continent] = 1;
}
});
稍后构建 UI 时,您可以像这样获取属性名称和值
for(var name in contHits) {
console.log(name);
var value = contHits[name];
console.log(value);
}
不应使用变量 i
作为contArr
变量的索引,因为每次有新事件data
时,i
都会重置为 0
。
我会做这样的事情:
var allContinents = {}; // this is an object, not an array
socket.on('data', function(data) {
//iterate through the socket data
data.forEach(function (item, i) {
if (!(item.continent in allContinents))
{
// we create the object if it doesn't exist yet
// the object key is the contient name...
allContinents[item.continent] = {
continent: continent,
val: 1,
};
}
// ... so it's easy to retrieve the item using the same key
allContinents[item.continent].val++;
console.log(allContinents[item.continent].val);
});
});