Я делаю функцию, которая возвращает элемент массива и возвращает предыдущий и следующий элементы, но моя проблема в том, что моя функция возвращает индекс элементов массива, и я хочу вернуть элементы
это массив
var items = ['bill','hill','dill',4,5,6,7,8,9,10];
это моя функция
function getItem(index, arr) {
if (index > arr.length) {
return -1;
}
const prev = index - 1;
const next = index + 1;
const prevPrev = prev - 1;
const nextNext = next + 1;
if (index == 0) {
return {index, next, nextNext}
} else if (index == arr.length - 1) {
return {prevPrev, prev, index}
} else {
return {prev, index, next};
}
}
выход
{prev: 1, index: 2, next: 3}
я хочу вернуться
{prev:'bill', index:'hill', next:'dill'}
console.info(getItem(2, элементы));
Сокращения свойств объекта ES6 не подходят для вашего случая. Вы должны явно определить значение для каждого ключа в возвращаемом объекте, например: {index: arr[index], next: arr[next], nextNext: arr[nextNext]}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете сделать это следующим образом:
var items = ['bill', 'hill', 'dill', 4, 5, 6, 7, 8, 9, 10];
function getItem(index, arr) {
if (index > arr.length) {
return -1;
}
const prev = items[index - 1];
const next = items[index + 1];
const prevPrev = items[prev - 1];
const nextNext = items[next + 1];
const index1 = items[index]
if (index == 0) {
return {
index1,
next,
nextNext
}
} else if (index == arr.length - 1) {
return {
prevPrev,
prev,
index1
}
} else {
return {
prev,
index1,
next
};
}
}
console.info(getItem(1, items));Вы возвращаете значение каждого индекса в массиве, а не номер индекса сам по себе.
Спасибо за ответ. Есть только 1 проблема, если у меня есть этот массив var items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; и когда я console.info(getItem(1, items)); мой вывод предыдущий: 1, индекс: 1, следующий: 3
Предполагая, что ваши входные данные для вашей функции являются числом для «индекса» и массивом для вашего «арра», возврат arr[number] должен возвращать нужные вам элементы.
то есть
if (index > arr.length) {
return -1;
}
const prev = index - 1;
const next = index + 1;
const prevPrev = prev - 1;
const nextNext = next + 1;
if (index == 0) {
return {arr[index], arr[next], arr[nextNext]}
} else if (index == arr.length - 1) {
return {arr[prevPrev], arr[prev], arr[index]}
} else {
return {arr[prev], arr[index], arr[next]};
}
}
Хотя вы должны обезопасить себя от того, что ваши возвращаемые значения выходят за пределы (т.е. проверка того, что nextNext и prevPrev все еще находятся в пределах размера массива - например, массив только из 2)
Если вы знаете индекс, вы можете использовать:
if (index == 0) {
return {arr[index], arr[next], arr[nextNext]}
...и так далее и тому подобное.
Вы должны сделать небольшое изменение внутри функции проверьте эти строки
const prev = index - 1;
const next = index + 1;
return { prev, index: index, next };
Просто измените их на
const prev = arr[index - 1];
const next = arr[index + 1];
return { prev, index: arr[index], next };
поэтому он возвращает значение вместо индекса
var items = ['bill','hill','dill',4,5,6,7,8,9,10];
function getItem(index, arr) {
if (index > arr.length) {
return -1;
}
const prev = arr[index - 1];
const next = arr[index + 1];
const prevPrev = prev - 1;
const nextNext = next + 1;
if (index == 0) {
return {index, next, nextNext}
} else if (index == arr.length - 1) {
return {prevPrev, prev, index}
} else {
return {prev, index:arr[index], next};
}
}
console.info(getItem(1, items))Вы можете использовать карту, чтобы добиться того же.
var items = ['bill', 'hill', 'dill', 4, 5, 6, 7, 8, 9, 10];
var arr = items.map((item, index, array) => {
return {
prev: item,
index: array[index + 1],
next: array[index + 2]
}
});
console.info(arr)Вот как бы я это сделал, используя внутреннюю функцию safeGet для возврата undefined, когда индексы выходят за пределы:
const items = ['bill', 'hill', 'dill', 4, 5, 6, 7, 8, 9, 10];
const getItem = (arr, i) => {
const safeGet = i => i >= 0 && i < arr.length ? arr[i] : undefined;
return { prev: safeGet(i-1), index: safeGet(i), next: safeGet(i+1) };
};
console.info(getItem(items, 0));
console.info(getItem(items, 2));
console.info(getItem(items, 9));
console.info(getItem(items, 20));
Как вы вызываете функцию
getItem