TheNuttyStudent
TheNuttyStudent

Reputation: 199

Updating array based on newer objects in another array

I have a question that is hard to describe. It's a tale of two arrays. I have one array holding 50 objects. Per object, I want to call its specific property "IDnumber".

The second array is one that has 5 variables containing all of the mentioned 50 objects's "IDnumber" property, with each variable having a set of 10 IDnumbers: var1 is the IDnumbers of the first 10 objects, var2 is is the IDnumbers of the second set, and so on until the 50th object's ID number.

This is where it gets hard. If I want to add in a new object in the first array, so that there'll be 51 objects, then I want to update the second array with a 6th variable, that contains all the remaining objects' IDnumbers (in this case just the 1). I want array2's length to be dependent on array1's length.

var arr1 = [], obj = {"IDNumber": "1"};
//this is an example array, all objects have the same ID here, but not in my real array
for (var i = 0; i < 51; i++) {
  arr1.push(obj);
}   

var var1 = [arr1[0]["IDNumber"], arr1[1]["IDNumber"], arr1[2]["IDNumber"], arr1[3]["IDNumber"], arr1[4]["IDNumber"], arr1[5]["IDNumber"], arr1[6]["IDNumber"], arr1[7]["IDNumber"], arr1[8]["IDNumber"], arr1[9]["IDNumber"]];
//the other remaining possible variables.

var arr2 = [var1, ...]; //No clue as how to take that on

How do I do that? How do I create an array that updates itself with newer possible variables like that? Each variable must have a max of 10 objects' IDnumbers.

Upvotes: 0

Views: 55

Answers (2)

Trash Can
Trash Can

Reputation: 6824

Suppose array1 contains your array of objects. The other one is array2 containing an array of arrays, each sub array has length 10 like you stated

You can split array1 into groups of 10 and put in array2 like this

function slice10(arraysOfObject) {
    var array2 = [];
    var leftOver = arraysOfObject.length % 10;
    var groupsOfTen = (arraysOfObject.length - leftOver)/10;
    for (var i = 0; i < groupsOfTen; i++) {
        array2.push([]);
        for (var j = i*10; j < i*10 + 10; j++)
            array2[i].push(arraysOfObject[j]["IDNumber"]);
    } 

    //now take care of the leftover
    if (leftOver > 0) {
        array2.push([]);
        for (var i = groupsOfTen*10; i < arraysOfObject.length; i++)
            array2[array2.length-1].push(arraysOfObject[i]["IDNumber"]);
    }
    return array2;
}

Upvotes: 2

trincot
trincot

Reputation: 351394

You could create a function to deal with adding an object to the two different data structures, and use that function also for adding the first 50 objects:

function addObject(arr1, arr2, obj) {
    if (arr1.length % 10 == 0) arr2.push([]);
    arr1.push(obj);
    arr2[arr2.length-1].push(obj.IDNumber);
}

var arr1 = [], arr2 = [];
for (var i = 0; i < 51; i++) {
  addObject(arr1, arr2, {"IDNumber": i + 1000}); // some dummy ID value
}

console.log(arr2);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Upvotes: 1

Related Questions