Для каждого массива в массиве в массиве

#javascript #arrays

#javascript #массивы

Вопрос:

У меня есть такой массив :

 [[[37.1316, 56.01645], [37.15117, 55.99955], [37.14439, 55.98932], [37.14661, 55.96372], [37.18212, 55.95873], [37.20565, 55.96284], [37.21284, 55.9766], [37.26641, 55.97947], [37.26056, 55.99314], [37.18898, 56.02122], [37.16173, 56.01322], [37.1316, 56.01645]]]
  

Как я могу использовать toFixed, чтобы получить каждый элемент в массиве toFixed(2)?

На выходе мне нужно вот так :

 [[[37.73, 55.87], [37.69, 55.89], [37.63, 55.89], [37.58, 55.91], [37.55, 55.90], [37.56, 55.94], [37.51, 55.94], [37.53, 55.90], [37.56, 55.89], [37.57, 55.86], [37.57, 55.83], [37.57, 55.82], [37.58, 55.79], [37.65, 55.78], [37.65, 55.80], [37.66, 55.82], [37.67, 55.83], [37.69, 55.84], [37.72, 55.85], [37.70, 55.86], [37.73, 55.87]]]
  

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

1. Как бы вы это сделали, если бы у вас были просто массивы в массиве?

2. Как бы вы это сделали — мой вопрос =)

3. Итак, у вас есть массив массивов массивов. Обычно вы выполняете итерацию с циклом for. Итак, вам нужен цикл for для циклов for для циклов.

4. Просто используйте 3 вложенных for цикла. Это программирование для начинающих.

5. SO не является обучающим сервисом, вы должны изучить основы самостоятельно.

Ответ №1:

Используйте Array.prototype.map для сопоставления с внутренними массивами и используйте Number.prototype.toFixed для отдельных деструктурированных чисел с плавающей запятой, которые вы получаете.

Используйте Array.prototype.reduce для накопления обработанного результата операции:

 const arr = [
  [
    [37.1316, 56.01645],
    [37.15117, 55.99955],
    [37.14439, 55.98932],
    [37.14661, 55.96372],
    [37.18212, 55.95873],
    [37.20565, 55.96284],
    [37.21284, 55.9766],
    [37.26641, 55.97947],
    [37.26056, 55.99314],
    [37.18898, 56.02122],
    [37.16173, 56.01322],
    [37.1316, 56.01645]
  ]
];


const data = arr.reduce((acc, innerArray) => {
  const t = innerArray.map(
    ([first, second]) => [first.toFixed(2), second.toFixed(2)]
  );
  acc.push(t);
  return acc;
}, []);
console.log(data);  

Ответ №2:

Вы можете использовать flat() и reduce() следующим образом:

 const arr = [[[37.1316, 56.01645], [37.15117, 55.99955], [37.14439, 55.98932], [37.14661, 55.96372], [37.18212, 55.95873], [37.20565, 55.96284], [37.21284, 55.9766], [37.26641, 55.97947], [37.26056, 55.99314], [37.18898, 56.02122], [37.16173, 56.01322], [37.1316, 56.01645]]]

const res = [arr.flat(2).reduce((acc, curr, i, flatArr) => {

  if(i % 2 === 1) {
    acc.push([flatArr[i - 1].toFixed(2), curr.toFixed(2)]);
  }

  return acc;
}, [])];

console.log(res);  

Ответ №3:

 const your_array = [[[37.73, 55.87], [37.69, 55.89], [37.63, 55.89], [37.58, 55.91], [37.55, 55.90], [37.56, 55.94], [37.51, 55.94], [37.53, 55.90], [37.56, 55.89], [37.57, 55.86], [37.57, 55.83], [37.57, 55.82], [37.58, 55.79], [37.65, 55.78], [37.65, 55.80], [37.66, 55.82], [37.67, 55.83], [37.69, 55.84], [37.72, 55.85], [37.70, 55.86], [37.73, 55.87]]]

your_array[0] = your_array[0].map((a) => [parseFloat(a[0].toFixed(2)), parseFloat(a[1].toFixed(2))])
console.log(your_array);  

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

1. Данные будут изменены на строки, чтобы вы могли добавить parseFloat в a[0].toFixed(2) и a[1].toFixed(2)

2. Спасибо за ваш ответ, но прямо сейчас я думаю, что я явно не могу понять, как это работает. Не могли бы вы привести пример для консоли?

3. Почему только your_array[0] вместо перебора всех элементов your_array ?

4. Потому что он получил 1 элемент массива, который имеет массив массивов. Это только для его примера.

Ответ №4:

Используйте Array.prototype.map для сопоставления с внутренними массивами и используйте Number.prototype.toFixed для отдельных деструктурированных чисел с плавающей запятой, которые вы получаете.