选项数组列表链接到另一个选项数组列表

问题描述 投票:0回答:1

我正在使用 Node js 中的 Commander 来构建 cli。
我创建了一个命令 groupBy,它使用 2 个选项:

  1. --路径列表的路径
  2. --jsonPaths 用于 json 路径列表

我可以打印这个:

$ index.js groupBy --paths path1 path2 --jsonPaths jsonPath1 jsonPath2
In the given files path1, path2
I want to show jsonPath1, jsonPath2 values

现在我希望能够为某些 jsonPath 添加按值过滤器
要打印此内容:

In the given files path1, path2
I want to show jsonPath1, jsonPath2, jsonPath3 values
Not filtering on jsonPath1
Filtering by value1 on jsonPath2
Filtering by value2, value3 on jsonPath3

我正在寻找一种方法来编写命令以允许这样做。

这里我添加了3个值进行过滤,但不知道哪一个适用于jsonPath1、2或3。

$ index.js groupBy --paths path1 path2 --jsonPaths jsonPath1 jsonPath2 jsonPath3 --values value1 value2 value3

有什么想法吗?谢谢。

node.js command-line-interface node-commander
1个回答
0
投票

要实现在命令行工具中为不同 JSON 路径指定过滤器的所需功能,您可以以将每个过滤器值与相应 JSON 路径明确关联的方式构建命令行参数。

$ index.js groupBy --paths path1 path2 --jsonPaths jsonPath1 jsonPath2 jsonPath3 --filter jsonPath1 "" --filter jsonPath2 value1 --filter jsonPath3 value2 value3

Js

const args = process.argv.slice(2);

const filters = {};
let currentJsonPath = null;

for (let i = 0; i < args.length; i++) {
  const arg = args[i];

  if (arg === "--filter") {
    const jsonPath = args[i + 1];
    const filterValues = args.slice(i + 2);
    filters[jsonPath] = filterValues;
    i += filterValues.length + 1;
  } else {
    currentJsonPath = arg;
  }
}

console.log("In the given files", args.slice(0, args.indexOf("--jsonPaths")).join(", "));

for (const jsonPath of args.slice(args.indexOf("--jsonPaths") + 1, args.indexOf("--filter"))) {
  console.log(`I want to show ${jsonPath} values`);
  if (jsonPath in filters) {
    const filterValues = filters[jsonPath];
    if (filterValues.length === 0) {
      console.log("Not filtering on", jsonPath);
    } else {
      console.log("Filtering by", filterValues.join(", "), "on", jsonPath);
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.