1

很抱歉,如果有人问过这个问题,我什至不确定如何最好地表达这个问题,所以我会用代码来做。注意:我无法控制数据的源格式,所以我必须按原样使用它......

我有一个看起来像这样的数组(真实的东西有很多条目,数百个,都像这样混合,其中一些元素是逗号分隔的值,其他元素不是):

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 自动完成插件中使用。同样,我无法控制传递给客户端的关键字(它们是什么)的格式,应用程序完成它的工作,我只能使用客户端代码(必须喜欢划分,是吗?)

4

4 回答 4

4

您不需要第二步来拥有数组数组,join然后split用逗号表示:

var array = ["item1", "item2", "item3, item4", "item5", "item6"]
console.log(array.join(',').split(','));

示例小提琴

于 2013-08-15T14:11:00.100 回答
3

递归你的Array

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"]
于 2013-08-15T14:12:20.697 回答
1

还有一种方法:

function flatten (array) {
    function f (a, b) {
        return a.concat(
            (b instanceof Array) ? b.reduce(f, []) : [b]);
    }
    return array.reduce(f, []);
}
于 2013-08-15T14:50:30.997 回答
1

干得好:

http://jsfiddle.net/Rq5fb/

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());
        }
    }
}
于 2013-08-15T14:11:24.643 回答