Как создать один объект с несколькими ключами и элементами? - PullRequest
4 голосов
/ 05 апреля 2019

У меня есть один массив с key и его array элементами

Когда я преобразую его из массива в объект, я получаю index 0 и 1, но здесь мне нужен индекс должен быть array1 и array2

let input = [{
    "array1": [{
      "id": 1,
      "name": "Test 1"
    }, {
      "id": 2,
      "name": "Test 2"
    }]
  },
  {
    "array2": [{
        "id": 1,
        "name": "Test 1"
      },
      {
        "id": 2,
        "name": "Test 2"
      }
    ]
  }
];


function convert(arr) {
  let obj = new Object();

  arr.forEach((value, key) => {
    obj = value;
  });
  return obj;
}
console.log(convert(input))

поэтому после вызова этой функции я получаю следующий вывод

{
  "array2": [
     {
      "id": 1,
      "name": "Test 1"
     },
    {
      "id": 2,
      "name": "Test 2"
    }
  ]
}

но здесь мне нужен вывод должен быть таким

{
  "array1": [
    {
      "id": 1,
      "name": "Test 1"
    },
    {
      "id": 2,
      "name": "Test 2"
    }
  ],
  "array2": [
    {
      "id": 1,
      "name": "Test 1"
    },
    {
      "id": 2,
      "name": "Test 2"
    }
  ]
}

Если я использую определение массива внутри функции преобразования и нажимаю на него, то снова получаю index 0 и 1.

Как я могу получить ожидаемый результат здесь.

Ответы [ 4 ]

2 голосов
/ 05 апреля 2019

Распространение (...) является ключом:

let input = [{
    "array1": [{
      "id": 1,
      "name": "Test 1"
    }, {
      "id": 2,
      "name": "Test 2"
    }]
  },
  {
    "array2": [{
        "id": 1,
        "name": "Test 1"
      },
      {
        "id": 2,
        "name": "Test 2"
      }
    ]
  }
];


function convert(arr) {
  return arr.reduce((acc, curr) => ({ ...acc, ...curr }), {});
}
console.log(convert(input))
.as-console-wrapper { max-height: 100% !important; top: auto; }

Вы также можете объединить его с Object.assign в самом массиве:

let input = [{
    "array1": [{
      "id": 1,
      "name": "Test 1"
    }, {
      "id": 2,
      "name": "Test 2"
    }]
  },
  {
    "array2": [{
        "id": 1,
        "name": "Test 1"
      },
      {
        "id": 2,
        "name": "Test 2"
      }
    ]
  }
];


function convert(arr) {
  return Object.assign(...arr);
}
console.log(convert(input))
.as-console-wrapper { max-height: 100% !important; top: auto; }
2 голосов
/ 05 апреля 2019

Для получения одного объекта с требуемыми ключами вы можете назначить все элементы одному объекту с Object.assign с синтаксисом распространения ....

let input = [{ array1: [{ id: 1, name: "Test 1" }, { id: 2, name: "Test 2" }] }, { array2: [{ id: 1, name: "Test 1" }, { id: 2, name: "Test 2" }] }],
    object = Object.assign(...input);

console.log(object)
.as-console-wrapper { max-height: 100% !important; top: 0; }

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

function convert(arr) {
    let obj = new Object();       // initialization

    arr.forEach((value, key) => {
        obj = value;              // assignment
    });
    return obj;                   // returns last assignment
}
0 голосов
/ 05 апреля 2019

Вам просто нужно использовать ваш ключевой параметр функции foreach в вашем объекте. Я прилагаю код ниже вы можете посмотреть.

let input = [{
    "array1": [{
      "id": 1,
      "name": "Test 1"
    }, {
      "id": 2,
      "name": "Test 2"
    }]
  },
  {
    "array2": [{
        "id": 1,
        "name": "Test 1"
      },
      {
        "id": 2,
        "name": "Test 2"
      }
    ]
  }
];


function convert(arr) {
  let obj = new Object();

  arr.forEach((value, key) => {
    obj[key] = value;
  });
  return obj;
}
console.log(convert(input))
0 голосов
/ 05 апреля 2019

Использование вашего кода

function convert(arr) {
   let obj = new Object();
   arr.forEach((value, key) => {
     obj[key] = value;
   });
   return obj;
}

Вы выполняли obj = value; на каждой итерации в forEach, что означало бы, что вы каждый раз назначаете obj новым значением.

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