首页 > Javascript数组排序

Javascript数组排序

遇到的面试题
Given an array that may contain nested arrays, return a flattened array. Input and out put are illustrated as follows.
将含有嵌套的数组排序输出。*号部分为需要写出的代码。

var input = [{a: 'a'}, 'b', ['c', 'd'], ['e', ['f']], 'g'];
function flatten_array(arr){ 
var out = [];
*******; 
return out;
 }

扁平的数组额。。曾经在群里看到过司徒正美大大的题目。感觉应该是差不多。

功能为

传入 ['a','b',['c','d']]

会返回 [ ['a','b'], ['a','b','c','d']]

传入 [ 'a', 'b', [ 'c', [ 'd' ] ] ]

会返回 [ [ 'a', 'b', 'c', 'd' ], [ 'a', 'b', 'c' ], [ 'a', 'b' ] ]

传入[ 'a', 'b', [ 'c', [ 'd' ], 'e', [ 'f' ] ] ]

会返回

[ [ 'a', 'b', 'c', 'd', 'e', 'f' ],
 [ 'a', 'b', 'c', 'd', 'e' ],
 [ 'a', 'b', 'c', 'e', 'f' ],
 [ 'a', 'b', 'c', 'e' ],
 [ 'a', 'b' ] ]

本人不才,引用下大神本人的解答

var combine = function(list, func) {
    var first = list.shift();
    var second = list.shift();
    if (second === undefined) {
        return first;
    }
    var combination = first.map(function(val1) {
        return second.map(function(val2) {
            return func(val1, val2);
        });
    }).reduce(function(val1, val2) {
        return val1.concat(val2);
    });
    if (list.length === 0) {
        return combination;
    } else {
        return combine([combination].concat(list), func);
    }
};
function main(ast) {
    if (Array.isArray(ast) && ast.length === 0) {
        return [];
    }
    var self = this;
    var result = combine(ast.map(function(val) {
        if (typeof val === 'string') {
            return [[val]];
        } else if (Array.isArray(val)) {
            return main(val).concat([[]]);
        } else {
            throw new Error('格式不对');
        }
    }), function(a, b) {
        return a.concat(b);
    });
    return result;
};

代码版权归司徒正美本人. 其实我也没怎么研究过他的这段代码


楼上的代码 不是很好(太长自己实在懒得看) 这个题目很明显应该用递归解决:(修改感谢@felix021提醒...)

var input = [{a: 'a'}, 'b', ['c', 'd'], ['e', ['f']], 'g'];
var out = [];

loop(input);

function loop(object) {
  for( var a in object ) {
    if( typeof(object) === 'object' ) {
      loop(object[a]);
    }else{
      out.push(object[a]);
    }
  }
} 
console.log(out);

再有 关于1楼 如果不是自己解决的 请不要乱贴代码 乱贴只会误导别人.

【热门文章】
【热门文章】