#javascript
#javascript
Вопрос:
Я хочу создать приведенный ниже массив с циклом for в качестве большого
var centres = {
1979: { x: width * 1 / 41, y: height / 2 },
1980: { x: width * 2 / 41, y: height / 2 },
1981: { x: width * 3 / 41, y: height / 2 },
...
}
а затем получите к нему доступ следующим образом:
function nodeYearPos(d) {
return yearCenters[d.year].x;
}
У меня есть следующий код, но он задает только год…
var yearCenters = Array.from(new Array(2020-1919 1), (x, i) => i 1919);
for (year = 1919; year <= 2020; year ) {
coords = getCentres(year); // this returns an object in the form {x : x, y : y}
yearCenters[year] = coords;
}
Комментарии:
1. используйте объект, а не массив. массивы проиндексированы на 0
2.
yearCenters = Object.fromEntries(Array.from(new Array(2020-1919 1), (x, i) => [i 1919,null]));
преобразуйте массив в объект, а затем задайте значения.
Ответ №1:
вы можете сделать так, как прокомментировал горак, но с помощью функции getCenters
var yearCenters = Object.fromEntries(Array.from(new Array(2020-1919 1), (x, i) => [i 1919, getCenters(i 1919)]));
или вы также можете попробовать
var yearCenters = {};
for (year = 1919; year <= 2020; year ) {
coords = getCenters(year);
yearCenters[year] = coords;
}
Комментарии:
1. Я использовал последнее предложение, поскольку это хорошо и понятно с созданием пустого объекта ({}) и последующим его заполнением.
Ответ №2:
Когда вы пытаетесь выполнить выборку по годам в yearCenters
массиве (например yearCenters[year]
), это не сработает, поскольку год не является индексом в массиве.
Я бы посоветовал вам сначала преобразовать массив в объект JS, чтобы индексация по нему работала с годами.
Смотрите фрагмент ниже —
// Create obejct from array
var yearCenters = Object.fromEntries(Array.from(new Array(2020-1919 1), (x, i) => [i 1919, null]))
// This loop remains same
for (year = 1919; year <= 2020; year ) {
coords = getCentres(year); // this returns an object in the form {x : x, y : y}
yearCenters[year] = coords;
}
// Mock function
function getCentres(year) {
return {
x: Math.random() * 100,
y: Math.random() * 100
}
}
console.log(yearCenters)