表格数组的函数

时间:2015-09-20 23:10:26

标签: javascript

我最近被问到一个面试问题,以表示一个给定的数组。例如,给出以下输入

var list = ['Adam', 'Brad', 'Cari', 'Donna', 'Ethan', 'Fred', 'Grok', 'Han', 'Izzy', 'Jay'];
var columns = 3;  // 2 or 4...., etc 

输出应如下所示

// [
//  [ 'Adam', 'Ethan', 'Izzy'],
//  [ 'Brad', 'Fred', 'Jay'], 
//  [ 'Cari', 'Grok'],
//  [ 'Donna', 'Han']
   ]

我提供了以下功能,我必须实现逻辑

function tableify (list, columns) {

 var result = [];
 return result;
}

console.log(JSON.stringify( tableify(list, columns)));

我能够解决问题的一半,在给定输入的情况下,您将使用数组的长度进行划分并使用它来推送子数组中的值

例如,如果列值为' 2'输出看起来像下面的

  [

  ['Adam', 'Fred']
  ['Brad', 'Grok']  
  ['Cari','Han']
  ['Donna','Izzy']
  ['Ethan','Jay']

  ]   

我正在努力放下潜在的逻辑

编辑:

这是我的尝试

function tableify (list, columns) {

 var result = [];

    var rows = Math.ceil(list.length/ columns);
    var removed = list.splice(rows, list.length -1);
    //console.log(rows);
    //console.log(removed);
    for(var i = 0; i < list.length; i++){
        result.push([list[i]]);
    }

    var j = 0;
    var join = result.map(function(elements){
        console.log(elements);
        elements.push(removed[j])
        j++;
    });


    return result;
}

我的思维过程是有两个不同的数组,其中一个包含[&#39; Adam&#39;,&#39; Brad&#39;&#39; Cari&#39; ,&#39; Donna&#39;]以及&#34;删除&#34; 数组中的其他项目。

执行拼接后,我想将原始数组中的其余项目推送到&#34;结果&#34; ,然后调用映射方法从&#34;删除&#34; 数组到结果

但问题是它只会将元素映射到第二列并跳过第三列的元素

1 个答案:

答案 0 :(得分:1)

过了一段时间我开发了。这种情况的算法。这是:

function tableify (list, columns) {
    var countUsed = 0;
    var len = list.length;
    var maxRow = Math.ceil(len / columns);
    var result = [];
    for(i = 0; countUsed < len; i++){
        for(j = 0; j < maxRow && countUsed < len; j++){
            //check if the sub array is initialized
            if(!result[j]){
                result[j] = [];
            }
            result[j][i] = list[countUsed];
            countUsed++;
        }
    }
    return result;
}   

//output test
var list = ["Adam", "Brad", "Cari", "Donna", "Ethan", "Fred", "Grok", "Han", "Izzy", "Jay"];
var columns = 3;
var a = tableify(list, columns);
document.write(JSON.stringify(a));

输出将如您所愿:

[
 [ 'Adam', 'Ethan', 'Izzy'],
 [ 'Brad', 'Fred', 'Jay'], 
 [ 'Cari', 'Grok'],
 [ 'Donna', 'Han']
]

我在许多其他情况下进行了测试,但它确实有效。