我如何获得一个JS数组,它有一些元素也是数组,并使ALL数组元素成为顶级元素

How do I take a JS array that has some elements that are also arrays and make ALL array elements top level elements

本文关键字:数组 元素 并使 数组元素 ALL 何获得 一个 JS      更新时间:2023-09-26

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

我有一个数组,看起来是这样的(真正的数组有很多条目,几百个,都是这样混合的,有些元素是逗号分隔的值,有些则不是):

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

您不需要第二步就可以获得数组数组,只需先join,然后用逗号split即可:

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

小提琴示例

数组上递归

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"]

开始:

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

还有一种方法:

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