I looked through your code and it is a valid solution, but you could reduce your code base by better leveraging the functions that JavaScript already provides, such as Array.prototype.indexOf()
.
For example, instead of building a new class-like-function (Element
) to track the appearance of a certain index, I simply made a deep copy of the the initial array and parsed it with indexOf()
.
Moreover, in your code, when you first declare this.objects = []
, this
actually refers to the global scope (window object
). As you can see, you are calling pairwise without building a new instance (new
keyword). In this case, thus the this
keyword is bound to the global window object.
Please find below my take on it:
function pairwise(arr, arg) {
var result = 0,
newArr = [],
//Used to hold the indices that we have already used to form our sum
indices = [];
//Loop through arr and create a deep copy of it in newArr
for(var k = 0; k < arr.length; k++) {
newArr.push(arr[k]);
}
//Loop through arr
for(var i = 0; i < arr.length; i++) {
//Loop through newArr
for(var j = 0; j < newArr.length; j++) {
//Since we want to add different elements of the array, we want to avoid adding the same element
if(i !== j) {
//If the sum of two elements is equal to arg AND the indices that we have in i and j are not part of the indices array
//Indices array is used to hold the already used indices, thus ensuring the accurate parsing of the parameters
if(arr[i] + newArr[j] === arg && indices.indexOf(i) === -1 && indices.indexOf(j) === -1) {
//Sum the indices up
result += i + j;
//Push the indices in the indices array in order to not use them in further iterations
indices.push(i, j);
}
}
}
}
return result;
}
pairwise([1,4,2,3,0,5], 7);
manpreet
Best Answer
2 years ago
I'm working through the Free Code Camp syllabus and I'm on to Intermediate JavaScript Algorithms. This Pairwise problem was the last challenge in that section. The section came just after "Object Oriented JavaScript." So I figured they were looking for an OO solution, but the instructions included a link to MDN's
array.reduce()
. My solution doesn't usearray.reduce()
and I'd really appreciate some feedback on what I could have done better to make my code more compact and efficient. It feels a little clunky but passes all the tests.The instructions
My Solution