0
votes

Comment puis-je faire référence à un type primitif en JavaScript?

Je voudrais faire une fonction comme ce travail comme prévu dans JavaScript:

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


5 commentaires

Mais ... 2 est en fait === à 2. Toutes les valeurs de numéro 2 sont indiscernables.


Vous devriez comparer l'entrée de l'espace mémoire, qui n'est pas possible dans JavaScript.


Et même pour les objets, votre code n'a de sens que si vous passez la valeur de l'élément de tableau réelle. Puisque vous devez connaître un index pour faire cela, il serait beaucoup plus simple de comparer l'index à la longueur de la matrice.


Si vous souhaitez transmettre une "référence à un élément de tableau", passez la matrice et l'index à la place. Dans ce cas, coïncidemment arr et 2 . (Cela ferait un meilleur exemple à discuter si les éléments de la matrice n'étaient pas égaux aux indices).


Donc, basé sur la réponse de Rager, ce que j'essaie de faire est plutôt impossible. Bummer, mais merci de toute façon!


4 Réponses :


0
votes

Vous pouvez peut-être ne pas stocker le numéro natif, mais une instance de numéro ..

EG. P>

p>

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


3 commentaires

Ouais, ce serait une solution, mais en utilisant nouveau numéro est en général une très mauvaise pratique.


Je crains que ce soit tout à fait impossible dans mon projet actuel :( Merci pour la réponse cependant.


@Bergi ouais, pas quelque chose que je ferais personnellement. Mais ne répondait que de la question de l'OP. Spécifiquement -> n'importe quel moyen de résoudre ce problème et de passer des numéros par référence?



1
votes

Vous pouvez le faire en enveloppant votre numéro dans un tableau ou un objet, comme celui-ci:

let arr = [[0], [1], [2]];
console.log(isLastElem(arr, [2])); // returns false
console.log(isLastElem(arr, arr[2])); // returns true


0 commentaires

-1
votes

Vous pouvez essayer ce code xxx


2 commentaires

Qu'est-ce que cela a à voir avec la question?


@Pointy pour vérifier l'index de la matrice => par exemple Isprimitive (Index + 1)



1
votes

Même si je me lance d'imaginer pourquoi quiconque aurait-il besoin de le faire, je pense que nous pourrions faire ce travail avec symbole code>:

Chaque valeur de symbole renvoyée du symbole () est unique. Une valeur de symbole peut être utilisée comme identifiant pour les propriétés d'objet; Ceci est le seul but du type de données. P> blockQuote>

Cela signifie que nous pouvons utiliser symbole code> pour tamponner chaque élément d'un tableau. Comme vous pouvez le voir, un tableau de 1 code> S peut être converti en un tableau de symboles de 1 code> qui sont tous em> uniques: p> xxx pré>

Par conséquent, pour identifier le dernier élément d'un tableau, vous réellement em> besoin de la référence à cet élément: p>

P>

const obj = (k, v) => (
  { [k]: v
  , get: () => v
  , equals: o => o[k] === v
  });

const stamp = (arr, secret = Date.now()) =>
  arr.map((x, i) => obj(`${secret}@@${i}`, x));
  
const arr = stamp([1, 1, 1]);

arr.forEach((x, _, xs) => {
  console.log(x.get(), x.equals(xs[xs.length - 1]));
});


0 commentaires