如果有人问过我很抱歉,我甚至不确定如何最好地表达这个问题,所以我会用代码来做。注意:我无法控制数据的源格式,所以我必须按原样使用它...
我有一个看起来像这样的数组(真实的东西有很多条目,数百个,都像这样混合,其中一些元素是逗号分隔值而不是其他的):
var array = ["item1", "item2", "item3, item4", "item5", "item6"]
我已经知道如何做到这一点:
var array = ["item1", "item2", ["item3", "item4"] , "item5", "item6"]
我需要的是它是这样的:
var array = ["item1", "item2", "item3", "item4", "item5", "item6"]
这个项目使用jQuery 1.7,重点是获取静态数据列表并将其解析为单个数组,以便在jQuery UI Autocomplete插件中使用。再一次,我无法控制传递给客户端的关键字格式(这些是什么),应用程序执行它所做的事情,我只能使用客户端代码(得到爱分区,是吗?)
答案 0 :(得分:4)
你不需要第二步就有一个数组数组,只需join
然后split
逗号:
var array = ["item1", "item2", "item3, item4", "item5", "item6"]
console.log(array.join(',').split(','));
答案 1 :(得分:3)
递归数组。
function flatten(arr) {
var i = 0, a = [];
for (; i < arr.length; ++i) {
if (arr[i] instanceof Array) a = a.concat(flatten(arr[i]));
else a.push(arr[i]);
}
return a;
}
var foo = ["item1", "item2", ["item3", "item4"], "item5", "item6"];
flatten(foo);
// ["item1", "item2", "item3", "item4", "item5", "item6"]
答案 2 :(得分:1)
你走了:
var array = ["item1", "item2", ["item3", "item4"], "item5", "item6"];
var result = [];
for (var i = 0, len = array.length; i < len; i++) {
if (typeof array[i] !== "object") {
result.push(array[i]);
}
else
{
while(array[i].length)
{
result.push(array[i].shift());
}
}
}
答案 3 :(得分:1)
还有一种方法可以做到:
function flatten (array) {
function f (a, b) {
return a.concat(
(b instanceof Array) ? b.reduce(f, []) : [b]);
}
return array.reduce(f, []);
}