Creating a javascript array with one to many type relationship
wordpress meta
title: 'Creating a javascript array with one to many type relationship'
date: '2015-01-04T08:59:33-06:00'
status: publish
permalink: /creating-a-javascript-array-with-one-to-many-type-relationship
author: admin
excerpt: ''
type: post
id: 795
category:
- javascript
- PHP
tag: []
post_format: []
title: 'Creating a javascript array with one to many type relationship'
date: '2015-01-04T08:59:33-06:00'
status: publish
permalink: /creating-a-javascript-array-with-one-to-many-type-relationship
author: admin
excerpt: ''
type: post
id: 795
category:
- javascript
- PHP
tag: []
post_format: []
Sometimes I need to build an array of lists with a one to many type relationship.
For example this data:
1. item1 has a parent of key1.
2. item2 has a parent of key2.
3. item3 has a parent of key1.
Using PHP after packing the array I will end up with something like this:
<?php
$m = array();
$m['key1'][] = 'item1';
$m['key2'][] = 'item2';
$m['key1'][] = 'item3';
print_r($m);
?>
Result:
Array
(
[key1] => Array
(
[0] => item1
[1] => item3
)
[key2] => Array
(
[0] => item2
)
)
In javascript there is some options to do something similar. I ended up with something like this:
packedArr['key1'] = "item1,item3"
packedArr['key2'] = "item2"
Not exactly array in array[key] but the comma separated list did what I needed.
Here is the javascript itself. To test it you can use online javascript testers or just make up a html page with a button and maybe have onclick display document.getElementById("demo").innerHTML = output;
<script>
function packArr() {
var pA = Array();
var inA = [
["child1","parent1"],
["child2","parent2"],
["child3","parent1"],
["child4","parent1"],
["child5","parent2"]
];
var inALen = inA.length;
for (var i = 0; i < inALen; i++) {
//alert(inA[i]);
if (pA[inA[i][1]] == null) {
pA[inA[i][1]] = inA[i][0];
} else {
pA[inA[i][1]] = pA[inA[i][1]] + "," + inA[i][0];
}
}
res="";
for ( var key in pA ) {
res = res + key + ": " + pA[key] + "<br>";
};
//res = myArray["parent1"];
document.getElementById("demo").innerHTML = res;
}
</script>