Array forEach возвращает только первый элемент обратно

#javascript #foreach

#javascript #foreach

Вопрос:

Я пытаюсь использовать forEach для массива, но он работает только с первым элементом в массиве.

Я хочу вернуть список объектов, но не в массиве

Это мой массив

 const latLngCoords = [   
  [-1.56789, 63.45547],
  [-1.44523, 63.48642],
  [-1.54635, 63.46643]

];
  

Тогда способ, которым я в настоящее время использую forEach, таков

 let x;

latLngCoords.forEach(e => {
  x = { lat: e[0], lng: e[1] };
});

return x;
  

Результат

 { lat: -1.56789, lng: 63.45547 }
  

Ожидал

 { lat: -1.56789, lng: 63.45547 }
{ lat: -1.44523, lng: 63.48642 }
{ lat: -1.54635, lng: 63.46643 }
  

Любая помощь приветствуется

Ответ №1:

Используется map для возврата нового массива.

forEach просто выполняет итерацию по массиву, но не возвращает новый.

 const latLngCoords = [   
  [-1.56789, 63.45547],
  [-1.44523, 63.48642],
  [-1.54635, 63.46643],
];

const result = latLngCoords.map(e => {
  return { lat: e[0], lng: e[1] };
});

console.log(result);  

Комментарии:

1. Спасибо @Tigran, но я не хочу возвращать новый массив, просто список объектов, как в ожидаемых результатах, которые я выставил

2. @Wisdom1 Вы хотите вернуть список объектов и сохранить его в одной переменной (x)? если вы не хотите возвращать новый массив, вам нужно вернуть объект, содержащий эти вложенные объекты

Ответ №2:

Вы можете использовать map для возврата массива данных.

 const x = latLngCoords.map(cord=>({lat:cord[0],lng:cord[1]}));
  

Ответ №3:

 let x=[];
const latLngCoords = [   
  [-1.56789, 63.45547],
  [-1.44523, 63.48642],
  [-1.54635, 63.46643]

];

latLngCoords.forEach((c) => {
      x.push({ lat: c[0], lng: c[1] })
})

console.log(x)  

Ответ №4:

forEach просто выполняет итерацию по массиву, не возвращая вам результатов. Вы повторно объявляете свою переменную x каждый раз внутри forEach.

просто вы используете консольный журнал внутри forEach:

 latLngCoords.forEach(e => {
console.log({ lat: e[0], lng: e[1] });
});
  

или используйте map для создания нового массива объектов:

 let newArr = latLngCoords.map(e => ({ lat: e[0], lng: e[1] }));
console.log(newArr)
  

Ответ №5:

Используйте map вместо forEach .

const result = latLngCoords.map(([lat, lng]) => ({ lat, lng}));

 const latLngCoords = [   
  [-1.56789, 63.45547],
  [-1.44523, 63.48642],
  [-1.54635, 63.46643]

];

const result = latLngCoords.map(([lat, lng]) => ({ lat, lng}));
console.log(result);