Javascript Set Value At Multidimensional Array Where Dimensions Are Not Pre-defined
Let's say I have an empty 1D array: var data = []; Now, I want to add value of 1 to data[1][1][3]; To do this, I need to extend data array to: data = [ [], [], [[],[],[1]] ]
Solution 1:
this function might help you
var data = []
setData(false, [1, 1, 3])
functionsetData(value_, indexes_) {
var currenLevelArr = data
var len = indexes_.length// you can also use Foreach instead of using forfor (var i = 0; i < len; i++) {
if (currenLevelArr[indexes_[i]] === undefined) {
if (i === len - 1) {
// we meet the target
currenLevelArr[indexes_[i]] = value_
} else {
currenLevelArr[indexes_[i]] = []
currenLevelArr = currenLevelArr[indexes_[i]]
}
} elseif (Array.isArray(currenLevelArr[indexes_[i]])) {
if (i === len - 1) {
// we meet the target but//there is an extra dimension in the place//in which we want to set the value_console.error('something went wrong')
} else {
currenLevelArr = currenLevelArr[indexes_[i]]
}
} else {
// the current position is filled with sth that we dont expect// if you want to replace the value ,you can add extra condition hereconsole.error('something went wrong')
}
}
}
console.log(data)
this is the way you can trace the nodes
object
var nodes = [
{id: "1", x: 0, y: 0 },
{id: "1.1", x: 0, y: 0 },
{id: "1.1.1", x: 0, y: 0 },
{id: "1.2", x: 1, y: 0 },
{id: "1.3", x: 0, y: 1 },
{id: "1.4", x: 1, y: 1 },
{id: "1.3.1", x: 0, y: 0 },
{id: "1.3.2", x: 0, y: 1 }
];
data = [];
nodes.forEach(function(node_){
var indices = node_.id.split(".");
indices = indices.map(function(d_){ returnNumber(d_) - 1; })
setData(true, indices);
});
functionsetData(value_, indexes_) {
var currenLevelArr = data
var len = indexes_.lengthfor (var i = 0; i < len; i++) {
if (currenLevelArr[indexes_[i]] === undefined) {
currenLevelArr[indexes_[i]] = { value : undefined , subData : [] }
if (i === len - 1) {
currenLevelArr[indexes_[i]].value = value_ ;
} else {
currenLevelArr = currenLevelArr[indexes_[i]].subData;
}
} else {
if (i === len - 1) {
currenLevelArr[indexes_[i]].value = 10 ;
} else {
currenLevelArr = currenLevelArr[indexes_[i]].subData
}
}
}
}
functionshow(data , str="") {
if(Array.isArray(data) ){
for (var i = 0 ; i < data.length; i++ ) {
if(data[i]) {
if(data[i].value) {
console.log(str + (i+1) + ": true" );
}
show(data[i].subData , str + (i+1) + ",")
}
}
}
}
show(data)
console.log(data);
Post a Comment for "Javascript Set Value At Multidimensional Array Where Dimensions Are Not Pre-defined"