/ / Uncught TypeError: No se puede establecer la propiedad '0' de undefined - javascript, jquery, loops, cada uno

No se detectó TypeError: no se puede establecer la propiedad '0' de undefined - javascript, jquery, loops, cada uno

Sigo recibiendo Uncaught TypeError: Cannot set property "0" of undefined, pero no puedo "por mi vida averiguar qué está mal!

var anchor = [];
getAnchors();
function getAnchors() {
$(".anchor").each(function(i) {
anchor[i] = $(this).offset().left;
});
}

Entonces, ¿qué está mal con este fragmento de código? He declarado anchor como una matriz. He estado buscando errores tipográficos tontos por una hora ahora. El error radica en i. Pero que es ¿el error?

Editar: Me enteré de lo que está mal.

Respuestas

1 para la respuesta № 1

Puedes usar $.map para construir matrices:

var anchor;
function getAnchors() {
anchor = $.map($(".anchor"), function(el) { return $(el).offset().left; });
}

1 para la respuesta № 2

Intenta devolver la matriz en su lugar? Me gusta esto:

function getAnchors() {
var allAnchors = [];
$(".anchor").each(function(i) {
allAnchors.push($(this).offset().left);
});
return allAnchors;
}

var anchor = getAnchors();

1 para la respuesta № 3

Debe crear la propiedad de objeto antes de asignarle un valor.

    var anchor = [];
$(".anchor").each(function(i) {
anchor[i] = [{
pos: null,
id: null
}];
anchor[i]["pos"] = $(this).offset().left;
anchor[i]["id"] = $(this).attr("id");
});

luego haga la asignación y sobrescriba nula con sus valores.


1 para la respuesta № 4

Encontré la respuesta. Solo tuve que declarar anchor en la función en su lugar.

getAnchors();
function getAnchors() {
var anchor = [];
$(".anchor").each(function(i) {
anchor[i] = $(this).offset().left;
});
// perhaps sort anchor
console.log(anchor);
}

Gracias por las respuestas sin embargo.


0 para la respuesta № 5

Puedes hacerlo:

var anchors = $(".anchor").map(function() {
return {
pos: $(this).offset().left,
id: this.id
}
}).get();