代码之家  ›  专栏  ›  技术社区  ›  Ala Eddine Menai

如何只过滤数组中带有类型符号的值?

  •  0
  • Ala Eddine Menai  · 技术社区  · 4 年前

    我正在努力 arrow library Symbol

    我用 filter 数组上的函数:

    export const extractSymbol = array => {
        if (isArray(array)) {
            return array.filter(value => typeof value === "symbol")
        }
    }
    

    但是因为我在实现之前创建测试,所以这个测试失败了:

      expect(extractSymbol([1, 2, 4, Symbol('vue'), Symbol('react')])).toStrictEqual([Symbol('vue'), Symbol('react')]);
       
    

    我本以为是真的,但它返回了:

     Expected: [Symbol(vue), Symbol(react)]
     Received: serializes to the same string
    
    2 回复  |  直到 4 年前
        1
  •  2
  •   CertainPerformance    4 年前

    使用相同参数创建的两个符号不相等:

    console.log(
      Symbol('foo') === Symbol('foo')
    );

    要使测试正常工作,请定义 expect

    const s1 = Symbol('vue');
    const s2 = Symbol('react');
    expect(extractSymbol([1, 2, 4, s1, s2])).toStrictEqual([s1, s2]);
    
        2
  •  1
  •   sonEtLumiere    4 年前

    let arr = [Symbol('foo'), 123];
    
    let filtered = arr.filter(x => typeof(x) == 'symbol');
    console.log(filtered);