├── LICENSE
├── demo.html
├── README.md
└── matrix.js
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2013 Y丫Y
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
6 | this software and associated documentation files (the "Software"), to deal in
7 | the Software without restriction, including without limitation the rights to
8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/demo.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | matrix demo
7 |
8 |
9 |
10 |
81 |
82 |
83 |
84 |
85 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ac-matrix
2 | =========
3 |
4 | Javascript Array Matrix converting library for constructing the developing simulation data and building the test list.
5 |
6 |
7 |
8 |
9 | ## usage
10 |
11 | var arra = [1,2,3,4];
12 | var arrb = ["a","b","c","d"];
13 | var arrc = ["A","B","C","D"];
14 | var arrd = ["α","β","γ","δ"];
15 | var m2sData = [
16 | [
17 | ["1-a-A", "1-a-B", "1-a-C", "1-a-D"],
18 | ["1-b-A", "1-b-B", "1-b-C", "1-b-D"],
19 | ["1-c-A", "1-c-B", "1-c-C", "1-c-D"],
20 | ["1-d-A", "1-d-B", "1-d-C", "1-d-D"]
21 | ],
22 | [
23 | ["2-a-A", "2-a-B", "2-a-C", "2-a-D"],
24 | ["2-b-A", "2-b-B", "2-b-C", "2-b-D"],
25 | ["2-c-A", "2-c-B", "2-c-C", "2-c-D"],
26 | ["2-d-A", "2-d-B", "2-d-C", "2-d-D"]
27 | ],
28 | [
29 | ["3-a-A", "3-a-B", "3-a-C", "3-a-D"],
30 | ["3-b-A", "3-b-B", "3-b-C", "3-b-D"],
31 | ["3-c-A", "3-c-B", "3-c-C", "3-c-D"],
32 | ["3-d-A", "3-d-B", "3-d-C", "3-d-D"]
33 | ],
34 | [
35 | ["4-a-A", "4-a-B", "4-a-C", "4-a-D"],
36 | ["4-b-A", "4-b-B", "4-b-C", "4-b-D"],
37 | ["4-c-A", "4-c-B", "4-c-C", "4-c-D"],
38 | ["4-d-A", "4-d-B", "4-d-C", "4-d-D"]
39 | ]
40 | ];
41 |
42 |
43 | ### matrix.single
44 | var ms = matrix.single(arra,arrb,arrc,function(a,b,c){
45 | return a +"-"+ b +"-"+ c ; // +"-"+ d
46 | });
47 |
48 | //["1-a-A","1-a-B","1-a-C","1-a-D","1-b-A","1-b-B","1-b-C","1-b-D","1-c-A","1-c-B","1-c-C","1-c-D","1-d-A","1-d-B","1-d-C","1-d-D","2-a-A","2-a-B","2-a-C","2-a-D","2-b-A","2-b-B","2-b-C","2-b-D","2-c-A","2-c-B","2-c-C","2-c-D","2-d-A","2-d-B","2-d-C","2-d-D","3-a-A","3-a-B","3-a-C","3-a-D","3-b-A","3-b-B","3-b-C","3-b-D","3-c-A","3-c-B","3-c-C","3-c-D","3-d-A","3-d-B","3-d-C","3-d-D","4-a-A","4-a-B","4-a-C","4-a-D","4-b-A","4-b-B","4-b-C","4-b-D","4-c-A","4-c-B","4-c-C","4-c-D","4-d-A","4-d-B","4-d-C","4-d-D"]
49 |
50 |
51 | ### matrix.multi
52 |
53 | var mm = matrix.multi(arra,arrb,arrc,function(a,b,c){
54 | return a +"-"+ b +"-"+ c ; // +"-"+ d
55 | });
56 |
57 | //[[["1-a-A","1-a-B","1-a-C","1-a-D"],["1-b-A","1-b-B","1-b-C","1-b-D"],["1-c-A","1-c-B","1-c-C","1-c-D"],["1-d-A","1-d-B","1-d-C","1-d-D"]],[["2-a-A","2-a-B","2-a-C","2-a-D"],["2-b-A","2-b-B","2-b-C","2-b-D"],["2-c-A","2-c-B","2-c-C","2-c-D"],["2-d-A","2-d-B","2-d-C","2-d-D"]],[["3-a-A","3-a-B","3-a-C","3-a-D"],["3-b-A","3-b-B","3-b-C","3-b-D"],["3-c-A","3-c-B","3-c-C","3-c-D"],["3-d-A","3-d-B","3-d-C","3-d-D"]],[["4-a-A","4-a-B","4-a-C","4-a-D"],["4-b-A","4-b-B","4-b-C","4-b-D"],["4-c-A","4-c-B","4-c-C","4-c-D"],["4-d-A","4-d-B","4-d-C","4-d-D"]]]
58 |
59 |
60 |
61 | ### matrix.m2s
62 | var m2s = matrix.m2s(m2sData);
63 |
64 | // ["1-a-A","1-a-B","1-a-C","1-a-D","1-b-A","1-b-B","1-b-C","1-b-D","1-c-A","1-c-B","1-c-C","1-c-D","1-d-A","1-d-B","1-d-C","1-d-D","2-a-A","2-a-B","2-a-C","2-a-D","2-b-A","2-b-B","2-b-C","2-b-D","2-c-A","2-c-B","2-c-C","2-c-D","2-d-A","2-d-B","2-d-C","2-d-D","3-a-A","3-a-B","3-a-C","3-a-D","3-b-A","3-b-B","3-b-C","3-b-D","3-c-A","3-c-B","3-c-C","3-c-D","3-d-A","3-d-B","3-d-C","3-d-D","4-a-A","4-a-B","4-a-C","4-a-D","4-b-A","4-b-B","4-b-C","4-b-D","4-c-A","4-c-B","4-c-C","4-c-D","4-d-A","4-d-B","4-d-C","4-d-D"]
65 |
66 |
67 | ### matrix.walk
68 | matrix.walk(true,m2sData,function(d){
69 | console.log("The current data is:"+ d);
70 | });
71 | // The current data is:1-a-A
72 | // The current data is:1-a-B
73 | // ...
74 |
75 | ### matrix.depth
76 |
77 | // return the depth of array dimension
78 | // only for standard matrix
79 | matrix.depth(m2sData);
80 |
81 | // 3
82 |
83 | error for matrix.depth([1,2,[1,2,[1,2]]]),
84 |
85 | just check the first item of array
86 |
87 | ## Use for What
88 |
89 | construct the developing simulation data.
90 |
91 | >build the list of json
92 |
--------------------------------------------------------------------------------
/matrix.js:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * The MIT License (MIT)
4 | * @license https://github.com/icai/ac-matrix
5 | * @author icai
6 | * @description Javascript Array Matrix converting library
7 | *
8 | */
9 |
10 | (function(window,undefined){
11 |
12 | var matrix = {};
13 |
14 | /**
15 | * istypeOf Object return Boolean
16 | * @param {Object} data instanceof Object
17 | * @param {String} type the type of data
18 | * @return {Boolean}
19 | */
20 | function istypeOf(data,type){
21 | return Object.prototype.toString.call(data).slice(8,-1) == type;
22 | }
23 |
24 |
25 | /**
26 | * walk the array
27 | * @param {[type]} data [description]
28 | * @param {Function} callback [description]
29 | * @return {[type]} [description]
30 | */
31 | function array_walk(/*deep,*/ data,callback){
32 | var deep = false;
33 | if(istypeOf(data,"Boolean")){
34 | deep = data;
35 | data = callback;
36 | callback = arguments[2];
37 | }
38 | var d = -1;
39 | while(data[++d]){
40 | if(istypeOf(data[d],"Array") && deep){
41 | array_walk(deep,data[d],callback);
42 | }else{
43 | callback(data[d])
44 | }
45 | }
46 | }
47 |
48 | /**
49 | * return One -dimensional arrays
50 | * @param {array} a array
51 | * @param {array} b array
52 | * @param {array} c array
53 | * @return {function} callback function to format the data format
54 | */
55 | function matrixSingle(a,b,c){
56 | var args = [].slice.call(arguments,0),
57 | callback = args.slice(-1)[0],
58 | data = args.slice(0,args.length-1);
59 |
60 | var _cacheloop = [],_calldata=[],_i = 105,
61 | _loop = function(data,i){
62 | var ct = String.fromCharCode(_i+ i);
63 | _cacheloop.splice(_cacheloop.length/2,0,
64 | "for (var "+ ct +" = 0; "+ ct +" < data["+ i +"].length; "+ ct +"++) {","}"
65 | );
66 | _calldata.push("data["+ i +"]["+ ct +"]");
67 | };
68 | for (var i = 0; i < data.length; i++) {
69 | _loop(data[i],i);
70 | };
71 | _cacheloop.splice(_cacheloop.length/2,0,
72 | "var rValue = callback.call(this,"+ _calldata.join(",") +");"+
73 | "if(rValue != undefined){"+
74 | "rArray.push(rValue);"+
75 | "}"
76 | )
77 | var fn = new Function ('data','callback',
78 | 'var rArray = [];'+
79 | _cacheloop.join("\n") +
80 | 'return rArray;'
81 | );
82 | return fn(data,callback);
83 | }
84 | /**
85 | * return Multidimensional arrays
86 | * @param {array} a array
87 | * @param {array} b array
88 | * @param {array} c array
89 | * @return {function} callback function to format the data format
90 | */
91 | function matrixMulti(a,b,c){
92 | var args = [].slice.call(arguments,0),
93 | callback = args.slice(-1)[0],
94 | data = args.slice(0,args.length-1);
95 | var _cacheloop = [],_calldata=[],_i = 105,
96 | _dims = function(name,depth,isend){
97 | var t = "";
98 | for (var i = 0; i <= depth; i++) {
99 | t += "["+ String.fromCharCode(_i + i) + "]";
100 | };
101 | if(!isend){
102 | return name + t +" = [];"
103 | }else{
104 | return name + t + " = callback.call(this,"+ _calldata.join(",") +");"
105 | }
106 | },
107 | _loop = function(isend,i){
108 | var ct = String.fromCharCode(_i+ i),_ins;
109 | _calldata.push("data["+ i +"]["+ ct +"]");
110 | _ins = _dims("rArray",i,isend);
111 | _cacheloop.splice(_cacheloop.length/2,0,
112 | "for (var "+ ct +" = 0; "+ ct +" < data["+ i +"].length; "+ ct +"++) {"+ _ins ,"}"
113 | );
114 | };
115 | for (var i = 0,len = data.length; i < len; i++) {
116 | i != len - 1 ? _loop(false,i) : _loop(true,i)
117 | };
118 | var fn = new Function ('data','callback',
119 | 'var rArray = [];'+
120 | _cacheloop.join("\n") +
121 | 'return rArray;'
122 | );
123 | return fn(data,callback);
124 | }
125 |
126 |
127 | /**
128 | * return the depth of matrix array
129 | * @param {[type]} data [description]
130 | * @return {[type]} [description]
131 | */
132 | function matrixDepth(data){
133 | var depth = 0,temp;
134 | temp = data;
135 | while(istypeOf(temp,'Array')){
136 | depth++;
137 | temp = temp[0];
138 | }
139 | return depth;
140 | }
141 | /**
142 | * multi matrix convert to single matrix
143 | * @param {Array} data matrix array
144 | * @return {Array} single matrix
145 | */
146 | function matrixM2s(data){
147 | var rArray = [];
148 | array_walk(true,data,function(d){
149 | rArray.push(d);
150 | })
151 | return rArray;
152 | }
153 |
154 | /**
155 | * import global variables
156 | * @type {Object}
157 | */
158 | matrix = {
159 | m2s:matrixM2s,
160 | depth:matrixDepth,
161 | multi:matrixMulti,
162 | single:matrixSingle,
163 | walk:array_walk
164 | };
165 | window.matrix = matrix;
166 | })(window)
--------------------------------------------------------------------------------