javascript - 导入提供 JSON 数据的模块时如何传递参数?
问题描述
如果我有类似的东西,
// resources.js
import DB from 'some/massive.json';
export const RESOURCES = (() => {
const {
dataA,
dataB
} = DB;
return [
dataA,
dataB
];
})
我像导入它一样
// someOtherFile.js
import { RESOURCES } from 'path/to/resources.js'
如何导入RESOURCES
,传入参数,以限制接收的数据?RESOURCES
大小可能是 MB,并且对于每个运行的测试,我不需要所有这些,我只需要针对特定测试的特定资源。
就像是,
import DB from 'some/massive.json';
export const RESOURCES = (dataToExclude = null, () => {
const {
dataA,
dataB
} = DB;
const dataArray = [
dataA, dataB
].flatMap(data => {
// Process
return data;
})
// dataArray will look something like,
// [ { dataName: 'NameA', ...props }, { dataName: 'NameB', ...props } ]
if (dataToExclude) {
const indexToSplice = dataArray.findIndex(({ dataName }) => dataName === dataToExclude)
dataArray.splice(indexToSplice, 1)
}
return dataToExclude;
});
解决方案
RESOURCES 的主体不是问题,我只是想看看是否可以传入参数
您已经RESOURCES
是一个函数,无需将其包装在另一个函数中。(也没有理由将其包裹在括号中,尽管它们是无害的。)将您希望它具有的过滤条件传递给它:
export const RESOURCES = (filteringCriteria) => {
const {
dataA,
dataB
} = DB;
// ...apply filtering here...
return [
dataA,
dataB
];
};
...然后在导入后调用它:
const data = RESOURCES({/*...filtering criteria...*/});
但是,如果您想将其包装在另一个函数中,是的,您可以这样做并让内部函数关闭过滤条件:
export const RESOURCES = (filteringCriteria) => {
return () => {
const {
dataA,
dataB
} = DB;
// ...apply filtering here...
return [
dataA,
dataB
];
};
};
然后你会调用它一次来建立过滤条件,并调用它的结果来实际获取数据:
const dataSupplier = RESOURCES({/*...filtering criteria...*/});
// ...
const data = dataSupplier();
推荐阅读
- visual-studio - 为什么xamarin无法连接调试器?
- amazon-web-services - 控制从 SQS 到 Lambda 的流程
- azure - 在 Azure Devops CI/CD 管道中为 MS Edge 浏览器运行量角器 E2E 测试
- r - 计算给定预期基尼指数的值向量
- unit-testing - 在单元测试中评估多个断言——不要在第一个失败的时候停止
- r - Travis CI - knitr 和依赖项
- class - Android BLE ScanResult List 处理
- python - 汇总多个数据帧的特定列
- gerrit - Gerrit 获得 2 次提交之间的差异
- javascript - Jquery动态选项隐藏/显示在选择框中