Я хотел бы, чтобы эта функция работала так, как задумано в JavaScript:

function isLastElem(array, elem) {
    if (elem === array[array.length-1]) {
        return true;
    }
    else {
        return false;
    }
}

Предполагается, что функция должна быть в состоянии идентифицировать последний элемент любого массива. Например:

let arr = [0, 1, 2];
console.log(isLastElem(arr, 2)); // I would expect false to be returned
console.log(isLastElem(arr, arr[2])); // I would expect true to be returned

Однако, поскольку числа являются примитивными значениями, они передаются функции по своим значениям, и поэтому оба вызова функции возвращают true. Любой способ решить это и передать номера по ссылке?

Важной идеей здесь будет сделать его пригодным для каждого цикла. Например:

let arr = [0, 1, 0];
arr.forEach((elem) => {
    if (isLastElem(arr, elem)) {
        console.log("Found the last element!");
    }
});

В первом 0 функция должна возвращать false, так как это не последний элемент массива. Затем при втором 0 он должен вернуть true и записать сообщение.

0
HunBonus 20 Дек 2019 в 18:45

3 ответа

Вы можете попробовать этот код


let arr = [0, 1, 2];
console.log(isPrimitive(arr[index+1]));

function isPrimitive(val) {
  return isString(val) || isBoolean(val) || (isNumber(val) && !isNaN(val));
}
-1
majid 20 Дек 2019 в 16:05

Вы можете сделать это, поместив свой номер в массив или объект, вот так:

let arr = [[0], [1], [2]];
console.log(isLastElem(arr, [2])); // returns false
console.log(isLastElem(arr, arr[2])); // returns true
1
Waruyama 20 Дек 2019 в 15:53

Вы холодно, может быть, не хранить родной номер, но экземпляр числа ..

например.

function isLastElem(array, elem) {
    if (elem === array[array.length-1]) {
        return true;
    }
    else {
        return false;
    }
}

let arr = [new Number(0), new Number(1), new Number(2)];

console.log(isLastElem(arr, 2)); // I would expect false to be returned
console.log(isLastElem(arr, arr[2])); // I would expect true to be returned
0
Keith 20 Дек 2019 в 15:51