首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在数组中只过滤类型为Symbol的值?

如何在数组中只过滤类型为Symbol的值?
EN

Stack Overflow用户
提问于 2020-08-27 12:02:34
回答 2查看 174关注 0票数 4

我正在使用arrow library,创建一个只返回类型为Symbol的元素的函数。

我在数组上使用filter函数:

代码语言:javascript
复制
export const extractSymbol = array => {
    if (isArray(array)) {
        return array.filter(value => typeof value === "symbol")
    }
}

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

代码语言:javascript
复制
  expect(extractSymbol([1, 2, 4, Symbol('vue'), Symbol('react')])).toStrictEqual([Symbol('vue'), Symbol('react')]);

我期望为true,但它返回:

代码语言:javascript
复制
 Expected: [Symbol(vue), Symbol(react)]
 Received: serializes to the same string
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-27 12:06:03

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

代码语言:javascript
复制
console.log(
  Symbol('foo') === Symbol('foo')
);

要使测试正常工作,请在expect外部定义符号,以便可以将相同的引用传递给两个数组:

代码语言:javascript
复制
const s1 = Symbol('vue');
const s2 = Symbol('react');
expect(extractSymbol([1, 2, 4, s1, s2])).toStrictEqual([s1, s2]);
票数 2
EN

Stack Overflow用户

发布于 2020-08-27 12:05:40

试试这个:

代码语言:javascript
复制
let arr = [Symbol('foo'), 123];

let filtered = arr.filter(x => typeof(x) == 'symbol');
console.log(filtered);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63608988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档