Javascript for循环不在字典中附加列表

时间:2013-08-19 20:10:49

标签: javascript for-loop dictionary

我不确定我完全理解这个问题。

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

1 个答案:

答案 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]}"