我有一个输入,如下所示:
"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"]]
最佳答案 您可以检查给定值是否为数组,如果内部项也是数组,如果不是,则将值包装在数组中.
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; }