【问题标题】:Javascript for loop not appending list in dictionaryJavascript for循环未在字典中附加列表
【发布时间】:2013-08-21 17:58:54
【问题描述】:

而且我不确定我是否完全理解问题所在。

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

【问题讨论】:

  • 您误解了in 运算符。
  • s 也未定义
  • 其实你的代码是正确的。请发布完整的代码,定义 slength

标签: javascript for-loop dictionary


【解决方案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]}"

【讨论】:

    猜你喜欢
    • 2020-05-16
    • 2019-07-26
    • 2020-03-26
    • 2019-06-14
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多