Javascript编程模式(函数)不清晰。为什么结果不同? 在Chrome控制台内,我有一个字符串:

Javascript编程模式(函数)不清晰。为什么结果不同? 在Chrome控制台内,我有一个字符串:,javascript,arrays,string,function,Javascript,Arrays,String,Function,然后使用两种方法对其进行修改并分配给新值,这两种方法看起来与我相同: 第一种方法: 第二种方法: 这两种方法都应该做什么: 将字符串分别转换为每个单词的数组 过滤数组,使其不存在重复值 将数组转换回字符串格式 我希望string2和string3的值为: 它们应该完全相同(根据我的逻辑) 我实际得到的是: 第二个字符串中缺少“约翰” 我已经检查的内容: 在内部执行的严格比较(==) if语句()对于第一个“john”为true 两个索引(参数 第一个“john”的值的索引是 按预期为0 我的问题

然后使用两种方法对其进行修改并分配给新值,这两种方法看起来与我相同:

第一种方法: 第二种方法: 这两种方法都应该做什么:
  • 将字符串分别转换为每个单词的数组
  • 过滤数组,使其不存在重复值
  • 将数组转换回字符串格式
  • 我希望string2和string3的值为: 它们应该完全相同(根据我的逻辑)

    我实际得到的是: 第二个字符串中缺少“约翰”

    我已经检查的内容:
  • 在内部执行的严格比较(==) if语句()对于第一个“john”为true
  • 两个索引(参数 第一个“john”的值的索引是 按预期为0
  • 我的问题: 请解释一下,为什么结果不同?

    第二个例子:

    var string2 = string.split(", ").filter(function(value, index, array){
        if(index === array.indexOf(value)) return index;
    }).join(', ');
    
    if(index==array.indexOf(value))返回索引是错误的

    如果
    index==array.indexOf(value)
    ,则返回
    index
    ,否则不返回任何内容。您需要返回
    true
    false

    在JavaScript中,除
    0
    之外的所有数字都转换为
    true
    ,而
    0
    转换为
    false
    。因此,如果
    索引
    0
    ,则基本上返回的是
    false
    ,而不是
    true

    这是正确的代码:

    var string2 = string.split(", ").filter(function(value, index, array){
        if(index === array.indexOf(value)) return true;
        else return false;
    }).join(', ');
    
    你的第二个例子:

    var string2 = string.split(", ").filter(function(value, index, array){
        if(index === array.indexOf(value)) return index;
    }).join(', ');
    
    if(index==array.indexOf(value))返回索引是错误的

    如果
    index==array.indexOf(value)
    ,则返回
    index
    ,否则不返回任何内容。您需要返回
    true
    false

    在JavaScript中,除
    0
    之外的所有数字都转换为
    true
    ,而
    0
    转换为
    false
    。因此,如果
    索引
    0
    ,则基本上返回的是
    false
    ,而不是
    true

    这是正确的代码:

    var string2 = string.split(", ").filter(function(value, index, array){
        if(index === array.indexOf(value)) return true;
        else return false;
    }).join(', ');
    
    vs

    这只是第一种情况下索引为零的问题,返回的索引为零,这解决了to
    false
    ,而它应该是
    true
    ,就像第二种情况一样

    vs

    这只是第一种情况下索引为零的问题,您返回的索引为零,这解决了to
    false
    ,而它应该是
    true
    ,就像第二种情况一样。

    您的结果是相反的。第一个代码块是消除“John”的代码块。(编辑问题以更正此问题)

    对于
    string3
    ,它消除了“John”,因为它返回“John”索引的唯一时间是“John”位于索引
    0
    ,这是一个错误的值,因此“John”不会包含在结果中

    如果您返回一个布尔值(如工作示例中所示)会更清楚,因此当值本身为假时,您不需要处理问题。

    您的结果是相反的。第一个代码块是消除“John”的代码块。(编辑问题以更正此问题)

    对于
    string3
    ,它消除了“John”,因为它返回“John”索引的唯一时间是“John”位于索引
    0
    ,这是一个错误的值,因此“John”不会包含在结果中


    如果您返回一个布尔值(如工作示例中所示)会更清楚,因此当值本身为假时,您不需要处理问题。

    第一个值没有意义。您必须始终从
    过滤器
    谓词函数返回一个布尔值-有时不是
    未定义
    ,有时是一个数字。您的“我实际得到的”结果看起来是相反的。1。我得到了用于string2的函数:2。由于错误,交换了post中的功能。现在它是正确的。您的第二个方法对我来说很好,没有返回重复项:
    string3==“john、bob、nina、colin、luck、robert、jack”
    。我不确定托尼在你的预期结果中来自何方。第一个毫无意义。您必须始终从
    过滤器
    谓词函数返回一个布尔值-有时不是
    未定义
    ,有时是一个数字。您的“我实际得到的”结果看起来是相反的。1。我得到了用于string2的函数:2。由于错误,交换了post中的功能。现在它是正确的。您的第二个方法对我来说很好,没有返回重复项:
    string3==“john、bob、nina、colin、luck、robert、jack”
    。我不确定托尼在你的预期成绩中来自何方。这就是问题所在!所以,我只需要返回值而不是索引?谢谢你,尼娜·斯科尔斯@Eduard否,您应该既不返回值也不返回索引。您应该返回一个布尔值。@bergi如果我返回该值,它就会工作(尽管我知道它在语义上是不正确的)。因此,如果我继续使用.fiter(),就没有正确的解决方法。然后我是否应该将.filter()函数换成其他函数?@Eduard如果返回
    true
    ,请检查我的答案。@Eduard返回
    可能适用于您的特定情况,但它不正确。我重复:
    filter
    期望回调返回布尔值(true或false)。其他任何东西都将被转换为一。错误的值(如
    索引
    0,或空字符串
    )会弄乱结果。所以只要使用
    返回检查
    ,或者
    如果(检查)返回true;否则返回false如果你坚持使用
    if
    语句。这就是问题所在!所以,我只需要返回值而不是索引?谢谢你,尼娜·斯科尔斯@Eduard否,您应该既不返回值也不返回索引。您应该返回一个布尔值。@bergi如果我
    string2 = "john, bob, tony, nina, colin, luck, robert, jack";
    string3 = "bob, tony, nina, colin, luck, robert, jack"
    
    var string2 = string.split(", ").filter(function(value, index, array){
        if(index === array.indexOf(value)) return index;
    }).join(', ');
    
    var string2 = string.split(", ").filter(function(value, index, array){
        if(index === array.indexOf(value)) return true;
        else return false;
    }).join(', ');
    
    if (index === array.indexOf(value)) return index; // returns 0, at index 0,
                                                      // should return true
    
    return index === array.indexOf(value);