当前位置: 首页 > 知识库问答 >
问题:

如何避免castArray函数?

晋坚
2023-03-14

Lodash castArray函数没有任何特殊之处。有没有什么方法可以在没有任何外部库的情况下,利用最新的语言功能解决这个问题,但时间很短?

如果您不熟悉该任务:

castArray(['abc', 'def'])
// ['abc', 'def']
castArray('abc')
// ['abc']
castArray()
// []
castArray(undefined)
// [undefined]

有没有办法在没有类型检查的情况下做到这一点?请注意,我寻找最短的等效物ES6。

共有2个答案

杨豪
2023-03-14

上面的答案没有考虑节点列表和其他类似数组(迭代)的对象。

对castArray更准确的回答是

function isIterable(value) {
       return Symbol.iterator in Object(value)
}

function getElementsAsArray(obj) {
    if (!obj) {
        return []
    }

    if (isIterable(obj) && typeof obj !== 'string') {
        return Array.from(obj)
    }

    return [obj]
}
戎永福
2023-03-14

您可以使用默认值为空数组的函数,并返回与数组或新数组一起检查的结果。

js lang-js prettyprint-override">const castArray = (data = []) => Array.isArray(data) ? data : [data];

console.log(castArray(['abc', 'def']));  // ['abc', 'def']
console.log(castArray('abc'));           // ['abc']
console.log(castArray());                // []

console.log(castArray(1));               // => [1]
console.log(castArray({ 'a': 1 }));      // => [{ 'a': 1 }]
console.log(castArray('abc'));           // => ['abc']
console.log(castArray(null));            // => [null]
console.log(castArray(undefined));       // => [undefined]
console.log(castArray());                // => []

var array = [1, 2, 3];
console.log(castArray(array) === array); // => true
 类似资料:
  • 问题内容: 我正在编写一个函数,该函数最多可以调用5000次。当然,我得到了。有什么办法可以以一种非常简单的方式重写此代码?: 顺便说一下,我们可以调用这些函数的深度有什么限制? 问题答案: 使用显式的对象堆栈和循环,而不是调用堆栈和递归:

  • 问题内容: 我正在尝试通过从客户端向服务器发送密钥和随机数来认证用户。 我的代码未向我显示客户端的响应。执行下面的代码时,我得到了一个空指针异常。 问题答案: 解决大多数问题的固定步骤: 阅读堆栈跟踪以确定哪一行代码引发NPE 在该行代码处设置一个断点 使用调试器,在遇到断点时,确定该行中的对象引用是 弄清楚为什么引用该文件(到目前为止,这是唯一实际的困难部分) 解决根本原因(也可能很困难)

  • 问题内容: 我有两个简单的Java代码。第一个将恒定功率定义为power = a.pow(b); 第二个将恒定功率定义为power = BigInteger.ONE.shiftLeft(b) 在命令行中设置内存标志- Xmx1024m,第一个代码可以正常工作,但是第二个代码却出现错误:java.lang.OutOfMemoryError:Java堆空间 我的问题:我应该在第二个代码中更改什么以避免

  • 问题内容: 我有一个用于将文本添加到现有.doc文件中的代码,它将通过使用apache POI将其另存为另一个名称。 以下是到目前为止我尝试过的代码 以下是我得到的 我已经添加了与此对应的所有jar文件,但仍然找不到解决方案。我对apache poi是陌生的,所以请帮我提供一些解释和示例。谢谢 问题答案: 从我对问题的评论中复制: 看起来您需要Apache POI发行版中的poi-ooxml-sc

  • 问题内容: 我有一个客户端库,在该客户端库中对我的REST服务进行http远程调用,然后返回给客户,该客户正在调用我的库,其中包含从REST服务获得的响应以及所有错误(如果包装了任何错误)围绕对象。 这是我的枚举类: 这是我的枚举类: 如您所见,在我的课堂上我有很多领域,因此我有一个很长的构造器,每次当我做一个对象的时候都会有很大的联系。将来我可能会有更多的字段,但目前只有这些字段。 有什么更好的

  • 问题内容: 要避免很多。 有没有好的替代方法? 例如: 当不知道对象是否存在时,可以避免使用。 问题答案: 在我看来,这似乎是一个相当普遍的问题,初级和中级开发人员往往会在某个时候遇到这些问题:他们要么不知道,要么不信任他们所参与的合同,并且防御性地检查了null。另外,在编写自己的代码时,他们倾向于依靠返回空值来表示某些内容,因此要求调用者检查空值。 换句话说,在两种情况下会出现空检查: 如果为