【问题标题】:For-Of Loop "Set is not a function"For-Of 循环“设置不是函数”
【发布时间】:2018-03-14 23:30:34
【问题描述】:

我这里有这段代码:

function Duplicate(array1, array2){
    var wordSet = new Set();
    var result = [];

    console.log(wordSet)
    for(let letter of array1){
       if(!wordSet(array1[letter])){
           wordSet.add(array1[letter])
       }
    }

    for(let word of wordSet){
        result.push(word)
    }

    return result;
}

console.log(Duplicate(['a','b','c'],['a','k','d','m','k']))

但是,当我尝试运行它时,它显示“wordSet 不是函数”。如果我使用常规的“for ...”循环,它会正常工作。有谁知道这里的问题是什么?

【问题讨论】:

  • 嗯,问题是wordSet 不是一个函数。不要叫它。你的意思是wordSet.has

标签: javascript for-of-loop


【解决方案1】:

正如评论中提到的,wordSet 不是一个函数,所以你不能调用它。 我认为评论者是对的,你在使用 has 和你的集合之后是正确的。 集合是独一无二的(你可能已经知道了)。 集合可以与 for...of 循环一起使用并解构。

for(let word of wordSet) // this is allowable

我不确定您在代码的这个区域中追求什么,因为您只需将数组的每个字母添加到 Set 中,它只会保留唯一的字母而没有重复。您永远不会在函数中使用 array2 。您是否要在 array1 和 array2 中查找重复的字母?

如果是这样,您可以执行以下操作:

1) 使用 add 为每个数组项加载一个 Set(添加每个字母,该集合将只保留唯一的)

2) 使用第二个数组,您可以搜索集合,例如:

for (let val of array2){ // look at each letter in the array
   if (wordSet.has(val)){ // if that letter is in your unique set from array 1
      result.push(val);  // push it onto your duplicate only array
   } // end if
} // end for

return result; // return the duplicate array to the caller

使用 2 个集合(每个数组的一组唯一字母)可能会更有效。取决于你真正追求的是什么。

希望这对您有所帮助。 -WWC

【讨论】:

    猜你喜欢
    • 2018-11-21
    • 2020-07-10
    • 2019-09-17
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 2014-12-18
    • 2020-08-21
    相关资源
    最近更新 更多