我有两个长度为300的数组。它们看起来像这样(JSON表示):
[
[
["word1",0.000199],
["word2",0.000102],
...
["word15",0.000102]
],
...
[
["anotherword1",0.0032199],
["anotherword2",0.032302],
...
["anotherword15",0.0320102]
]
]
我有这个强力算法:
for(var i = 0; i < 300; i++)
{
for(var j = 0; j < 15; j++)
{
for(var ii = i + 1; ii < 300; ii++)
{
for(var jj = 0; jj < 15; jj++)
{
for(var jjj = 0; jjj < 15; jjj++)
{
if(new_keywords[i][j][0] === new_keywords[ii][jj][0] && new_keywords[ii][jj][0] === state_keywords[i][jjj][0])
{
console.log(0);
}
}
}
}
}
}
我需要在这些数组中搜索相同的单词,如果单词是相同的,那么我将值相加并将sum除以3并在state_keywords数组中替换该值。因此,对于每个在数组中超过一次的单词,我都有其值的含义。
现在......我的方法非常糟糕,因为我现在有大约300万次迭代,这很疯狂。我需要在JavaScript中更好地实现我的数组。像lexikographical树或kd-tree之类的东西。
谢谢。
修改
以下是http://jsfiddle.net/dD7yB/1/示例。
EDIT2:
如果我不够清楚,我很抱歉。那么我正在做什么:
state_keywords
。索引从0到299,它们代表themes
... new_keywords
数组到达时,它们可能会有所不同。state_keywords
数组中。而且我需要尽可能有效地做,因为我需要每秒都这样做,所以它必须是快速的。
EDIT3:
现在我使用这段代码:
var i, j, jj, l;
for(i = 0; i < 300; i++)
{
for(j = 0; j < 15; j++)
{
l = new_keywords[i].length;
for(jj = 0; jj < l; jj++)
{
if(state_keywords[i][j][0] === new_keywords[i][jj][0])
{
state_keywords[i][j][1] = (state_keywords[i][j][1] + new_keywords[i][jj][1]) / 2;
}
}
}
}
比前一个快得多。
答案 0 :(得分:2)
为什么不将这些数组转换为具有字符串作为值的键的对象?然后你可以直接查找单词并获取值?
var wordlists = [
{
"word1":0.000199,
"word2":0.000102,
...
"word15":0.000102
},
...
{
"anotherword1":0.0032199,
"anotherword2":0.032302,
...
"anotherword15":0.0320102
}
]
然后使用
查找wordlists[0]["word2"] //0.000102