Нормализовать данные в массиве объектов (JavaScript) - PullRequest
0 голосов
/ 17 января 2020

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

[
  {id: 1, number: 10, x: 0.3, y: 0.4, …}
  {id: 2, number: 5, x: 0.5, y: 0.2, …}
  {...}
  {...}
  {...}
]

Я хочу отобразить записи x и y на новое значение в диапазоне от 0 до 1250. Поэтому я получаю следующий массив объектов

[
  {id: 1, number: 10, x: 375, y: 500, …}
  {id: 2, number: 5, x: 625, y: 250, …}
  {...}
  {...}
  {...}
]

Какая лучшая практика для этого?

Лучший, Крис

Ответы [ 3 ]

1 голос
/ 17 января 2020

Что-то подобное с методом map.

const arr = [
  {id: 1, number: 10, x: 0.3, y: 0.4},
  {id: 2, number: 5, x: 0.5, y: 0.2},
];


const res = arr.map(({x, y, ...rest}) => ({...rest, x: x * 1250, y: y * 1250 })); 

console.log(res)
0 голосов
/ 17 января 2020

Предполагая, arr это ваш массив объектов. Вы можете использовать карту, которая возвращает новый измененный массив.

let arr = [
  {
    id: 1, number: 10, x: 0.3, y: 0.4,
  },
  {
    id: 2, number: 5, x: 0.5, y: 0.2
  }
];

const normalize = (obj) => {
  x = obj.x * 1250;
  y = obj.y * 1250;
  return {...obj, x, y};
  // If you're only using mutating then
  // above lines can be
  // obj.x *= 1250;
  // obj.y *= 1250;
  // return obj;
}

// Not mutating array, output new array
const nonMutating = (arr) => {
  let newRes = [];
  arr.forEach(a => {
    newRes.push(normalize(a));
  });
  return newRes;
}

console.log(nonMutating(arr));

console.log("\n");

// Mutating input array
const mutating = (arr) => {
  return arr.map(a => normalize(a));
}

console.log(mutating(arr));
0 голосов
/ 17 января 2020

Вы можете использовать Array.map

const arr = [
  {id: 1, number: 10, x: 0.3, y: 0.4},
  {id: 2, number: 5, x: 0.5, y: 0.2}
];

// Use Array.map to iterate
const arr1 = arr.map(ob => {
  ob.x*=1250; 
  ob.y*=1250; 
  return ob;
});

console.log(arr1);
...