0

而且我不确定我是否完全理解这个问题。

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 语句中时,它们甚至不会弹出,但是当我将它们放在循环之外时,对于相同的值,它们显示它多次评估为真。

4

1 回答 1

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]}"
于 2013-08-19T20:16:59.390 回答