Создание объекта JavaScript из двух массивов

У меня есть два массива: newParamArr[i] и paramVal[i].

Пример значений в массиве newParamArr[i]: ["Name", "Age", "Email"]

Пример значений в массиве paramVal[i]: ["Jon", "15", "[email protected]"]

Мне нужно создать объект JavaScript, который помещает все элементы в массиве в один и тот же объект. Например

{newParamArr[0]:paramVal[0], newParamArr[1]:paramVal[1], ...}

Длина двух массивов всегда одинакова, но длина массивов может увеличиваться или уменьшаться. Как в...

newParamArr.length === paramVal.length всегда будет возвращать true.

Ни одно из приведенных ниже сообщений не помогло бы ответить на мой вопрос:

Рекурсия Javascript для создания объекта JSON

Рекурсивно прокручивать объект для создания списка свойств

Ответ 1

Вы имеете в виду это?

var keys = ['foo', 'bar', 'baz'];
var values = [11, 22, 33]

var result = {};
keys.forEach((key, i) => result[key] = values[i]);
console.log(result);

Ответ 2

Использование ECMAScript2015:

const obj = newParamArr.reduce((obj, value, index) => {
    obj[value] = paramArr[index];
    return obj;
}, {});

(EDIT) Ранее неправильно понимал OP для получения массива:

const arr = newParamArr.map((value, index) => ({[value]: paramArr[index]}))

Ответ 3

Следующие работали для меня.

//test arrays
var newParamArr = [1, 2, 3, 4, 5];
var paramVal = ["one", "two", "three", "four", "five"];

//create an empty object to ensure it the right type.
var obj = {};

//loop through the arrays using the first one length since they're the same length
for(var i = 0; i < newParamArr.length; i++)
{
    //set the keys and values
    //avoid dot notation for the key in this case
    //use square brackets to set the key to the value of the array element
    obj[newParamArr[i]] = paramVal[i];
}

console.log(obj);

Ответ 4

Я знаю, что вопрос уже год, но вот однострочное решение:

Object.assign( ...newParamArr.map( (v, i) => ( {[v]: paramVal[i]} ) ) );

Ответ 5

Вы можете использовать Object.assign.apply() для объединения массива пар {ключ: значение} в объект, который вы хотите создать:

Object.assign.apply({}, keys.map( (v, i) => ( {[v]: values[i]} ) ) )

Запускаемый фрагмент:

var keys = ['foo', 'bar', 'baz'];
var values = [11, 22, 33]

var result =  Object.assign.apply({}, keys.map( (v, i) => ( {[v]: values[i]} ) ) );
console.log(result); //returns {"foo": 11, "bar": 22, "baz": 33}

Ответ 6

Используйте цикл:

var result = {};
for (var i = 0; i < newParamArr.length; i++) {
  result[newParamArr[i]] = paramArr[i];
}

Ответ 7

Чтобы достичь ожидаемого результата, используйте ниже

var newParamArr = ["Name", "Age", "Email"];
var paramVal = ["Jon", "15", "[email protected]"];
var obj = []
for (var i = 0; i < newParamArr.length; i++) {
  obj = obj + newParamArr[i] + ":" + paramVal[i] + ",";
}

obj = "{" + obj.substring(0, obj.length - 1) + "}"

console.log(obj)

https://codepen.io/nagasai/pen/pbXyKR

Ответ 8

Я нуждался в этом в нескольких местах, поэтому я сделал эту функцию...

function zip(arr1,arr2,out={}){
    arr1.map( (val,idx)=>{ out[val] = arr2[idx]; } );
    return out;
}


console.log( zip( ["a","b","c"], [1,2,3] ) );

> {'a': 1, 'b': 2, 'c': 3} 

Ответ 9

Вы можете сделать это, используя новую функцию JavaScript 6:

Например:

var keys = ['zahid', 'fahim', 'hasib' ,'iftakhar'];

var ages = [11, 22, 33 ,31];

var testObject = {
    [keys.shift()] : ages.shift(),
    [keys.shift()] : ages.shift(),
    [keys.shift()] : ages.shift(),
    [keys.shift()] : ages.shift()

};

console.log(testObject); // { zahid: 11, fahim: 22, hasib: 33, iftakhar: 31 }