我不确定我完全理解这个问题。
var vtf=[]; // Dictionary that maps number-> list
var length;
var s; // A list of numbers with s.length = length
// length and s are set to values
for(i=0; i<length; i++)
{
var f=s[i];
if(f in vtf)
vtf[f].push(i);
else
vtf[f]=[i];
}
所以基本上我检查vtf是否包含值f = s [i]。如果是,它会将i附加到vtf [f]中包含的列表中,如果不是,则会创建一个新列表,其中i作为唯一元素。
我得到的问题是,在运行之后,每个vtf索引只包含添加的第一个i,尽管我知道vtf中保存的几乎所有值都应该包含多个元素的列表。
我无法理解我做错了什么。当我在if语句中放入警报时,它们甚至不会弹出,但是当我将它们放在循环之外时,对于相同的值,它们会显示它多次评估为真。
答案 0 :(得分:1)
你的代码是正确的,唯一的事情,vtf
应该被声明为一个对象,而不是一个数组:
var vtf={};
var s=[1,2,3,4,1,2,3,4];
for(i=0; i<s.length; i++)
{
var f=s[i]; // All values in s are numbers
if(f in vtf)
vtf[f].push(i);
else
vtf[f]=[i];
}
console.log(JSON.stringify(vtf))
结果:
"{"1":[0,4],"2":[1,5],"3":[2,6],"4":[3,7]}"