如何获取一个JS数组,该数组包含一些也是数组的元素,并使所有数组元素成为顶级元素

时间:2013-08-15 14:03:57

标签: javascript jquery arrays sorting

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

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

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插件中使用。再一次,我无法控制传递给客户端的关键字格式(这些是什么),应用程序执行它所做的事情,我只能使用客户端代码(得到爱分区,是吗?)

4 个答案:

答案 0 :(得分:4)

你不需要第二步就有一个数组数组,只需join然后split逗号:

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

Example fiddle

答案 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)

你走了:

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());
        }
    }
}

答案 3 :(得分:1)

还有一种方法可以做到:

function flatten (array) {
    function f (a, b) {
        return a.concat(
            (b instanceof Array) ? b.reduce(f, []) : [b]);
    }
    return array.reduce(f, []);
}