Creating multiple arrays of objects

Viewed 260

For an experiment I'm writing, I have to make six of the kind of list below.

var list1 = [];
var enc_len_1 = pregenerated_faces[1].encoding_faces.length;
var rec_len_1 = pregenerated_faces[1].recall_faces.length; 

for (var i = 0; i < enc_len_1; i++){
    var obj_encode = { 
        'encode': pregenerated_faces[1].encoding_faces[i]
    };
    list1.push(obj_encode);
};

for (var i = 0; i < rec_len_1; i++){
  var obj_recall = { 
      'reacall': pregenerated_faces[1].recall_faces[i]
  };
  list1.push(obj_recall);
};

Each list will look like this: list = [{encode: ...jpg}, {encode: ...jpg}..., {recall: ...jpg}, {recall:...jpg}...]

What is a smarter way to make six of these without writing six-fold redundant code? Oh, also, pregenerated_faces is an array of .json objects containing all the encoding and recall faces image strings.

2 Answers
var lists = [];
for (var face of pregenerated_faces) { //should loop 6 time
  var list = [];
  face .encoding_faces.forEach( e => list.push({'encode': e}));
  face .recall_faces.forEach( e => list.push({'recall': e}));
  list.push(list);
}

Check this, I have created a function that will give you N lists depending upon the input size of your pregenerated_faces, and your list renderer is also out of the implementation so that it can be used anywhere... and can be changed too

function getNObjects(N, keyCallback) {
  const output = []
  for (var i = 0; i < N; i++) {
    output.push(keyCallback(i));
  }
  return output
}

// your code
function createList(index) {
  var list = [];
  var enc_len = pregenerated_faces[index].encoding_faces.length;
  var rec_len = pregenerated_faces[index].recall_faces.length;

  for (var i = 0; i < enc_len; i++) {
    var obj_encode = {
      'encode': pregenerated_faces[index].encoding_faces[i]
    };
    list.push(obj_encode);
  };

  for (var i = 0; i < rec_len; i++) {
    var obj_recall = {
      'reacall': pregenerated_faces[index].recall_faces[i]
    };
    list.push(obj_recall);
  };
  return list
}
// Test case
const pregenerated_faces = [{
    name: "Ardis Pool",
    gender: "male"
  },
  {
    name: "Barbra Panganiban",
    gender: "female"
  },
  {
    name: "Ralph Sales",
    gender: "male"
  },
]
// Test Function
function testFunction(index) {
  var list = [];
  var enc_len = pregenerated_faces[index].name
  var rec_len = pregenerated_faces[index].gender

  var obj_encode = {
    'encode': enc_len
  };
  list.push(obj_encode);
  obj_recall = {
    'reacall': rec_len
  };
  list.push(obj_recall);
  return list
}

const [one, two, three] = getNObjects(3, testFunction);
console.log(one, two, three)

Related