I am trying to create a function that can manipulate arrays...
var myArray = [2, 1, 1, 1, 1];
now I want it to be like this
[3, 1, 1, 1]
now my function accepts 3 parameters
well my objective is to accept the indexTarget which for example
myFunction(myArray,0,3); //myArray is [2, 1, 1, 1, 1]
as you can see I want my function to loop over the myArray
so it will try to add numbers in the array until it will reach the morphToValue
so it became [3, 1, 1, 1], it purges the 2
on the first index and 1
on the second index to gain 3
. It will just also minus any number on the array if it adds too much on the exceeding on the morphToValue
another example will be like this I want the array
var myArray = [2, 1, 1, 1, 1];
to be like this
[2, 1, 3];
by doing call myFunction like this
myFunction(myArray,2,3);
how can I make this possible? I want also to continue iterating on the beginning again of the array if I will set indexTarget in the last index of the array so it would be like this
var myArray = [2, 1, 1, 1, 1];
it will become
[1, 1, 1, 3]; //when I invoke myFunction(myArray,4,3);
please put a comment if you don't understand something....
this is what I have tried so far http://jsfiddle.net/eESNj/
var myArray = ['2', '1', '1', '1', '1'];
indexPurge(myArray, 0, 3);
function indexPurge(haystack, indexTarget, morphToValue) {
var toIntHaystack = [];
for (var i = 0; i < haystack.length; i++) {
toIntHaystack.push(parseInt(haystack[i]));
}
console.log(toIntHaystack); //before
var i = 0;
var purgedValue = 0;
do {
console.log(i + ' - ' + toIntHaystack[i]);
purgedValue += toIntHaystack[i];
toIntHaystack.splice(i, 1);
if (purgedValue >= morphToValue) {
break;
}
i++;
} while (i < toIntHaystack.length);
toIntHaystack.splice(indexTarget, 0, morphToValue); //after
console.log(toIntHaystack);
}
here is my variant, it should work faster then splice variant:
function fixIdx(idx, len) {
return idx % len;
}
function fixStartOffset(idx, len) {
return (idx < len) ? 0 : (idx % len);
}
function morhArray(inputArray, startIndex, targetValue) {
var l = inputArray.length;
var sum = 0;
var endIdx = 0;
while ( (sum < targetValue) && (endIdx < l) )
sum += inputArray[fixIdx(startIndex+endIdx++, l)];
if (endIdx == l) return [sum];
var outputArray = [];
for (var i=fixStartOffset(startIndex+endIdx, l); i<startIndex; i++)
outputArray.push(inputArray[i]);
outputArray.push(sum);
for (var i=startIndex+endIdx; i<l; i++)
outputArray.push(inputArray[i]);
return outputArray;
}
I solved my own problem.. I hope this will help someone that wil have the same problem
http://jsfiddle.net/YUdJL/
var myarrayx = [1,1,3]; //5
function morphArray(myarray, index, target){
//accumulate value on the array to gain target value
var accu = 0;
for(var i = 0; i < myarray.length; i++){
var thisIndex = myarray[i];
for(var j = 0; j < thisIndex; j++){
if(accu != target){
myarray[i]--;
accu++;
}
else{
break;
}
}
}
//remove the zeroes on the array
for(var k = 0; k < myarray.length; k++){
if(myarray[k] == 0){
myarray.splice(k, 1);
}
}
//check if the target index is still available
if((myarray.length - 1) > index){
//index is not available anymore.. just push it
myarray.push(target);
}
else{
//insert the element in the desired index
myarray.splice(index, 0, target);
}
return myarray;
}
console.log('----'+morphArray(myarrayx, 0, 2));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With