скопировать object.keys в новый объект - PullRequest
0 голосов
/ 11 ноября 2018

как я могу скопировать один или все Object.keys в новые литералы объекта Пример:

  let obj = [
    {
      name: "value1",
      age: "value2",
      gender: "value3",
      group: "cat"
    },
    {
      name: "value1",
      age: "value2",
      gender: "value3",
      group: "cat"
    },
    {
      name: "value1",
      age: "value2",
      gender: "value3",
      group: "dog"
    },
    {
      name: "value1",
      age: "value2",
      gender: "value3",
      group: "dog"
    },

    ]

вывод выглядит так:

{ 
cat: { name: "value1", age: "value2"},
dog: { name: "value1", age: "value2"}
}

мы должны сделать временный объект, чтобы дублировать его, а затем назначить его newObj? Я хотел бы знать, объясняя, поэтому я бы понял, это только для примера, и как, если в группах много добрых групп, мы должны создать функцию для этого, верно?

Ответы [ 3 ]

0 голосов
/ 11 ноября 2018

Вы можете сделать это довольно легко, используя Array#reduce() и деструктуризацию объекта

const res = data.reduce((a, {group, gender, ...rest})=>{
   a[group] = {...rest}
   return a
},{})
    
console.log(res)
<script>
  const data = [{
      name: "value1",
      age: "value2",
      gender: "value3",
      group: "cat"
    },
    {
      name: "value1",
      age: "value2",
      gender: "value3",
      group: "cat"
    },
    {
      name: "value1",
      age: "value2",
      gender: "value3",
      group: "dog"
    },
    {
      name: "value1",
      age: "value2",
      gender: "value3",
      group: "dog"
    },

  ]
</script>
0 голосов
/ 11 ноября 2018

Вы можете использовать Object.assign (одна из многих альтернатив):

const array_of_objects = [{ name: "value1", age: "value2", gender: "value3", group: "cat" }, { name: "value1", age: "value2", gender: "value3", group: "cat" }, { name: "value1", age: "value2", gender: "value3", group: "dog" }, { name: "value1", age: "value2", gender: "value3", group: "dog" }, ];

const result = {};
for (const obj of array_of_objects) result[obj.group] = Object.assign({}, obj);

console.log(result);

Object.assign оценит (перечисляемые) свойства объекта (ов), заданных в качестве второго (третьего, ...) аргумента, и сохранит их в объекте, переданном в качестве первого аргумента. Полученный объект возвращается и представляет, таким образом, (мелкую) копию.

То же самое можно достичь с помощью более современного синтаксиса распространения.

Если вы хотите скопировать некоторые определенные свойства, а не все, тогда вы можете просто использовать простое назначение для каждой клавиши. Это не очень сложно в качестве ответа, и я полагаю, у вас нет проблем с записью следующего текста в теле цикла:

const copy = {};
copy.name = obj.name;
// copy anything else here ...
result[obj.group] = copy; // store it in the overall result object

Если вы хотите что-то круче, мы вернемся к синтаксису ES6:

const {name, age} = obj;
result[obj.group] = {name, age};
0 голосов
/ 11 ноября 2018

Вы можете просмотреть все элементы в вашем массиве, обработать данные и присвоить результат новому объекту:

let array_of_objects = [{
    name: "value1",
    age: "value2",
    gender: "value3",
    group: "cat"
  },
  {
    name: "value1",
    age: "value2",
    gender: "value3",
    group: "cat"
  },
  {
    name: "value1",
    age: "value2",
    gender: "value3",
    group: "dog"
  },
  {
    name: "value1",
    age: "value2",
    gender: "value3",
    group: "dog"
  },

]

let result = {};

array_of_objects.forEach(animal =>
  result[animal.group] = {
      name: animal.name,
      age: animal.age
    }
  );

console.log(result);

Пояснения:

  1. Мы создаем объект результата, который будет собирать данные в требуемом формате.
  2. Метод forEach позволяет нам перебирать массив. Во время каждого цикла элемент называется animal.
  3. Затем объект result получает свои предыдущие значения благодаря расширенной нотации ...result плюс новые ключи благодаря части кода [animal.group]. Обратите внимание, что это обозначение находится между квадратами, потому что ключ необходимо оценить.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...