We'll use that fact later. Array.apply(null, [undefined, undefined, undefined]) is equivalent to Array(undefined, undefined, undefined), which produces a three-element array and assigns undefined to each element. How can you generalize that to N elements? Consider how Array() works, which goes something like this:
The array structure has stricter rules than a list or np.array, and this can reduce errors and make debugging easier, especially when working with numerical data.
The third way of initializing is useful when you declare an array first and then initialize it, pass an array as a function argument, or return an array. The explicit type is required.
T myArray[ARRAY_SIZE] = {}; i.e. just an empty pair of {}. This will default-initialize an array of any type (assuming the elements allow default initialization), which means that for basic (scalar) types the entire array will be properly zero-initialized.
Array.prototype.slice with -1 can be used to create a new Array containing only the last item of the original Array, you can then use Destructuring Assignment to create a variable using the first item of that new Array.
Array .filter() with a nested call to .find() will return all elements in the first array that are members of the second array. Check the length of the returned array to determine if any of the second array were in the first array.
If you want to remove objects from an array that have exactly the same properties and values as other objects in the array, you would need to write a custom equality checking function to support it.