我有一个输入,如下所示:
"a"
或
["a","b"]
或
[["a","b"],["c"]]
目标是将它们转换为第三种模式。我的意思是我需要一个大数组,包含多个数组。 作为伪代码,我尝试如下:
input=[].concat(input);
for (var t in input)
{
t=[].concat(input);
}
但它不适用于第二种模式,因为我想要[["a","b"]]
。
"a"=>[["a"]]
和
["a","b"]=>[["a","b"]]
和
[["a","b"],["c"]] => [["a","b"],["c"]]
答案 0 :(得分:2)
您可以检查给定值是否为数组,如果内部项也是数组,如果没有,则将值包装在数组中。
function convert(v) {
if (!Array.isArray(v)) {
v = [v];
}
if (!Array.isArray(v[0])) {
v = [v];
}
return v;
}
console.log(convert("a")); // [["a"]]
console.log(convert(["a", "b"])); // [["a", "b"]]
console.log(convert([["a", "b"], ["c"]])); // [["a", "b"], ["c"]]

.as-console-wrapper { max-height: 100% !important; top: 0; }

如果您需要测试内部数组的每个项目,那么您可以先检查所有项目。
function convert(v) {
if (!Array.isArray(v)) {
v = [v];
}
if (v.some(function (a) { return !Array.isArray(a); })) {
v = [v];
}
return v;
}
console.log(convert("a")); // [["a"]]
console.log(convert(["a", "b"])); // [["a", "b"]]
console.log(convert([["a", "b"], "c"])); // [[["a", "b"], "c"]]

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)
您可以执行以下操作;
var inputs = ["a", ["a","b"],[["a","b"],["c"]]],
result = inputs.map(a => [[].concat(...a)]);
console.log(JSON.stringify(result));