2014-12-05 60 views
0

从一组阵列

var set1 = [14, 9, 1, 6, 16], 
 
    set2 = [4, 15, 16, 14, 11], 
 
    set3 = [16, 10, 2, 3, 8], 
 
    set4 = [3, 17, 16, 6, 14], 
 
    set5 = [19, 18, 14, 6, 20], 
 
    set6 = [6, 15, 8, 7, 2], 
 
    set7 = [15, 14, 2, 19, 3], 
 
    set8 = [8, 2, 14, 10, 5], 
 
    set9 = [11, 6, 8, 10, 18], 
 
    set10 = [14, 10, 12, 4, 18], 
 
    input = [set1, set2, set3, set4, set5, set6, set7, set8, set9, set10]; 
 

 
// Sort function 
 
function sortFunction(a) { 
 

 
    var len = a.length, 
 
    temp, i, j; 
 

 
    for (i = 0; i < len; i++) { 
 
    for (j = i + 1; j < len; j++) { 
 
     if (a[j] < a[i]) { 
 
     temp = a[i]; 
 
     a[i] = a[j]; 
 
     a[j] = temp; 
 
     } 
 
    } 
 
    } 
 
    return a; 
 
} 
 

 
// Sorting each sets and finding range of each sets 
 
for (var i = 0; i < len; i++) { 
 

 
    input[i] = sortFunction(input[i]); 
 
    minRange.push(Math.min.apply(null, input[i])); 
 
    maxRange.push(Math.max.apply(null, input[i])); 
 
} 
 

 
// Finding the range of input 
 

 
var minimum = Math.min.apply(null, minRange); 
 
var maximum = Math.max.apply(null, maxRange); 
 
var range = maximum - minimum + 1; 
 

 

 
// Matrix table function 
 
var tableArray = []; 
 

 
function table() { 
 
    for (var i = 0; i < len; i++) { 
 
    for (var j = 0; j < range; j++) { 
 
     if (input[i][j] == j) { 
 
     tableArray[i].push(input[i][j]); 
 
     } else { 
 
     tableArray[i].push(0); 
 
     } 
 
    } 
 
    tableArray.push(tableArray[i]); 
 
    } 
 
    return tableArray; 
 
}

我有问题的解决这个问题的生成一个矩阵:输入是一组10个阵列,其中每个阵列含有1范围5不同数目的 - 20。输入= [[14,9,1,6,16],[4,15,16,14,11],[16,10,2,3,8],[3,17,16,32] 6,14],[19,18,14,6,20],[6,15,8,7,2],[15,14,2,19,3],[8,2,14,10, 5],[11,6,8,10,18],[14,10,12,如图4所示,18]]

我会升IKE以产生10×20矩阵,其中每一行有有20个数字与下面的模式输出:

输出= [[1,0,0,0,0,6,0,0,9,0,0, 0,0,14,0,16,0,0,0,0],[0,0,0,4,0,0,0,0,0,0,11,0,0,14,15, 16,0,0,0,0],[...],...]

进出口使用JavaScript来解决这个...

+0

我只是说我的代码,但它是一个烂摊子,我无法弄清楚什么是错的 – 2014-12-05 12:22:33

回答

1

创建一个新的输出数组:

var out = []; 

遍历输入数组。对于每个嵌套阵列创建具有20零填充输出阵列中的新的数组,然后只需替换在正确的位置巢输入阵列中的元素的值的输出阵列中的那些元素。由于您知道嵌套数组的大小,并且它很小,因此只需列出每个元素而不是使用内部循环即可。

for (var i = 0, l = arr.length; i < l; i++) { 
    var el = arr[i]; 
    out[i] = Uint8Array(20); 
    out[i][el[0] - 1] = el[0]; 
    out[i][el[1] - 1] = el[1]; 
    out[i][el[2] - 1] = el[2]; 
    out[i][el[3] - 1] = el[3]; 
    out[i][el[4] - 1] = el[4]; 
} 

DEMO

如果你的浏览器不支持Uint8Array你可以使用一个单独的函数来创建填充阵列:

function padArray() { 
    var out = []; 
    for (var i = 0, l = 20; i < l; i++) { 
    out.push(0); 
    } 
    return out; 
} 

及用途:

out[i] = padArray(); 
+0

感谢安迪,你的回答作品完美除了需要更改 出[I] [ARR [I] [0]] = ARR [I] [0]; out [i] [arr [i] [1]] = arr [i] [1]; out [i] [arr [i] [2]] = arr [i] [2]; out [i] [arr [i] [3]] = arr [i] [3]; out [i] [arr [i] [4]] = arr [i] [4]; 与 出[I] [ARR [I] [0] -1] = ARR [I] [0]; out [i] [arr [i] [1] -1] = arr [i] [1]; out [i] [arr [i] [2] -1] = arr [i] [2]; out [i] [arr [i] [3] -1] = arr [i] [3]; out [i] [arr [i] [4] -1] = arr [i] [4]; – 2014-12-05 12:56:33

+1

@Saeed,完成。我错过了。 – Andy 2014-12-05 13:00:32

0

你真的应该自己尝试过。这很容易。开始的20个零的阵列,然后用来自该阵列中的值填充所述槽:

function posArray(arr, max) { 
    var res = []; 

    for (var i = 0; i < max; i++) res.push(0); 

    for (var i = 0; i < arr.length; i++) { 
     var a = arr[i]; 

     if (a > 0 && a <= max) res[a - 1] = a; 
    } 

    return res; 
} 

var output = []; 

for (var i = 0; i < input.length; i++) { 
    output.push(posArray(input[i], 20)); 
} 
+0

我只是说我的代码,我知道这是容易的,但我不能弄清楚笑 – 2014-12-05 12:23:45

0

东西像这样也可以工作(未测试):

var set1 = [14, 9, 1, 6, 16], 
    set2 = [4, 15, 16, 14, 11], 
    set3 = [16, 10, 2, 3, 8], 
    set4 = [3, 17, 16, 6, 14], 
    set5 = [19, 18, 14, 6, 20], 
    set6 = [6, 15, 8, 7, 2], 
    set7 = [15, 14, 2, 19, 3], 
    set8 = [8, 2, 14, 10, 5], 
    set9 = [11, 6, 8, 10, 18], 
    set10 = [14, 10, 12, 4, 18], 
    input = [set1, set2, set3, set4, set5, set6, set7, set8, set9, set10]; 
var output = []; 

for (var e=0; e<input.length; e++) { 
    newRow = []; 
    for (var i=0;i<20; i++) { 
    if (input[e].indexOf(i) > -1) { 
     newRow.push(i); 
    } 
    else { 
     newRow.push(0); 
    } 
    } 
    output.push(newRow); 
} 
alert(output);