2

I have an array of elements.

0,1,2,3,4,5,6,7,8,9

user can pick any number of elements and ask to move them after any 1 particular element.

example: ask for 4,5,7 to be moved after 1 for example, thus resulting in

0,1,4,5,7,2,3,6,8,9

or ask for 0,5 to be moved after 9

1,2,3,4,6,7,8,9,0,5

any pseudo code is greatly appreciated.

                move_after= function(after, move_array) {
                    //remove elements from the array
                    move_array.forEach(function(element) {
                        var index = operations.indexOf(element);
                        operations.splice(index, 1);
                    });


                    var after_index = operations.indexOf(after) + 1;

                    //insert each move_array element to array
                    move_array.forEach(function(element) {
                         operations.splice(after_index++, 0, element);
                    });
                }

                move_after(2, [0,1]);

doesn't exactly give me what i want

5 Answers 5

1

Here a prototype is used, which inserts an array into an array after a specific digit:

Array.prototype.insertIntoArr = function(insert, digit) {
    var i = this.indexOf(digit) + 1;
    return this.slice(0, i).concat(insert).concat(this.slice(i));
}

The function moveAfter( ... ) first cleans the array from the values of toMove. Second toMove is inserted after the specific digit:

function moveAfter(arr, toMove, after) {
    toMove.forEach(function (value) {
        arr.splice(arr.indexOf(value), 1);
    });
    var res = arr.insertIntoArr(toMove, after);
    return res;
}

Example

Sign up to request clarification or add additional context in comments.

Comments

0

What about something like this: http://plnkr.co/edit/k2h6BWTUCFj5BS4oFF8C

(function(){
  var arr = [0,1,2,3,4,5,6,7,8,9];
  var userArr = [4,5,7];
  var temp = [];
  var pos = 1;

  for(var i = arr.length; i >= 0; i--){
    if(userArr.indexOf(arr[i]) !== -1){
      temp.push(arr[i]);
      arr.splice(i, 1);
    }
  }

  for(var i = 0; i < temp.length; i++){
    arr.splice(arr.indexOf(pos) + 1, 0, temp[i]);
  }

  console.log(arr);
  //outputs [0, 1, 4, 5, 7, 2, 3, 6, 8, 9]
})();

Comments

0

Using your idea

function move_after(orig_array, after, move_array) {
                //remove elements from the array
                move_array.forEach(function(element) {
                    var index = operations.indexOf(element);
                    orig_array.splice(index, 1);
                });

                var after_index = orig_array.indexOf(after) + 1;

                //insert each move_array element to array
                move_array.forEach(function(element) {
                     orig_array.splice(after_index++, 0, element);
                });
          return orig_array;
}

Then you use

var result = move_after([0, 1, 2] , 2, [0,1]);

Hope it works,

Dan

Comments

0

Try this:

move_after = function (after, move_array) {
  var i, s;

  s = [];
  for (i = 0; i < 10; i++)
  {
    // only append "i" it if is NOT in move_array
    if (move_array.indexOf(i) === -1) s.push(i);
    if (i == after) s.push(move_array);
  }

  return s;
};

Comments

0

Something like this?

var a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
var b = move_after(1, [4, 5, 7]);
var c = move_after(9, [0, 5]);

console.log(a);
console.log(b);
console.log(c);

function move_after(moveAfter, toMove) {
    var arr = a.reduce(function (c, e, i) {
        if (toMove.indexOf(e) === -1) {
            c.push(e);
        }
        return c;
    }, []);
    var toMoveAfterIndex = arr.indexOf(moveAfter) + 1;
    Array.prototype.splice.apply(
        arr, [toMoveAfterIndex, 0].concat(toMove)
    );
    return arr;
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.