javascript - 在javascript中定义函数时,有没有办法将数组作为参数传递?
问题描述
const validateCred = arr => {
let checkableArr = arr.pop();
for (let i = arr.length - 1; i >= 0; i--) {
arr[i]
checkableArr.push(arr[i])
}
}
当我运行代码时,我收到一条错误消息,指出 .push() 不是函数,这是因为 checkableArr 不是数组,(我认为)但 checkableArr 是 arr 的变体(当该函数被调用)并且该函数无法知道 arr 将是一个数组,有没有办法解决这个问题?
解决方案
你得到了那个错误,因为你没有确保传递的数组 ( ) 的最后arr
一项是数组本身,但是你的函数的逻辑要求它是一个数组。
有多种方法可以解决这个问题,其中一些已经被其他人概述过(@hungerstar)。
检查最后一个元素arr
一种尝试是确保里面的最后一个元素/项目arr
是一个数组,如果不是,则退出。
const validateCred = arr => {
let lastItem = arr.pop();
if (!Array.isArray(lastItem)) {
throw new Error('validateCred :: Last item of passed array must be an array itself');
}
// ... rest of your code ...
}
尽管这并不能解决根本原因,但它可以确保您获得关于问题所在的体面且描述性的信息。如果最后一项不是数组本身,可以通过定义后备数组来改进这一点。像这样的东西:
const validateCred = arr => {
let lastItem = arr.pop();
let checkableArr = Array.isArray(lastItem) ? lastItem : [];
// ... rest of your code ...
}
需要注意的一点:如果最后一项可能是一个包含值的数组,则必须将该值复制到新数组中!
const validateCred = arr => {
let lastItem = arr.pop();
let checkableArr = Array.isArray(lastItem) ? lastItem : [lastItem]; // <--
// ... rest of your code ...
}
提示:以下答案基于猜测。该名称validateCred
让我假设您使用它来验证凭据。但是,这只是猜测,因为所有提供的代码所做的都是获取最后一项,然后将其余内容arr
反向推入其中(= 反转和展平)
反转和展平
如果您想要做的validateCred
只是反转和展平(并且您只针对支持环境),您可以使用单行轻松做到这一点:
// impure version
const validateCred = arr => arr.reverse().flat();
// pure version
const validateCred = arr => arr.flat().reverse();
为了也支持旧环境,您可以使用.reduce
and.concat
代替.flat
:
// impure version
const validateCred = arr => arr.reverse().reduce((acc, x) => acc.concat(x), []);
// pure version
const validateCred = arr => arr.reduce((acc, x) => acc.concat(x), []).reverse();
推荐阅读
- node.js - node -v 显示最新版本,但我的错误日志有不同的
- java - Spring reactive 不支持的扩展类型:org.springframework.data.jpa.repository.support.JpaEvaluationContextExtension
- python - 由于依赖问题,无法在诗歌中安装torch和torchvision的gpu版本
- reactjs - Cashfree 支付网关集成在 react native 和 laravel 中(orderAmount 是必需的错误)
- firebase - Firebase,我如何捕捉异常并告诉用户它?
- java - 在 Android Retrofit Post 调用中将 HashMap 作为 POST 请求值发布
- python - Folium 与 Pandas 的热图
- asp.net - Cookie 在 HTTPS 连接中是否标记为安全?
- python - 将 API 响应转换为 Pandas DataFrame
- javascript - 我怎样才能从这个 JS 对象中取出这个属性?