2016-08-24 17 views
6

Mam dwie tablice: newParamArr[i] i paramVal[i].Tworzenie obiektu JavaScript z dwóch tablic

Przykładowe wartości w tablicy newParamArr[i]: ["Name", "Age", "Email"]

Przykładowe wartości w tablicy paramVal[i]: ["Jon", "15", "[email protected]"]

muszę utworzyć obiekt JavaScript, który umieszcza wszystkie elementy w tablicy w tym samym obiekcie . Na przykład

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

Długości dwóch tablicach są zawsze takie same, ale długość tablic mogą zwiększać lub zmniejszać. Jak w ...

newParamArr.length === paramVal.length zawsze zwraca wartość true.

Żadne z poniższych stanowisk może pomóc odpowiedzieć na moje pytanie:

Javascript Recursion for creating a JSON object

Recursively looping through an object to build a property list

+0

proszę dodać niektóre dane 'newParamArr' i' paramVal' oraz pożądany wynik. –

+0

@NinaScholz Przykłady dodane – CtrlAltDelete

+0

Co to ma wspólnego z rekurencją? –

Odpowiedz

9

Czy masz na myśli to?

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

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

W przypadku używasz lodash, tam _.zipObject dokładnie do tego typu rzeczy.

+0

Tak, to jest wynik, który chciałem, pozwól mi go przetestować! – CtrlAltDelete

0

Korzystanie ECMAScript2015:

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

(EDIT) Wcześniej źle op Chcesz array:

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

Spowoduje to wyświetlenie tablicy obiektów z jednym kluczem; nie połączy wszystkiego w jeden obiekt. Zamiast tego chcesz "zmniejszyć". – Jacob

+0

Tak, błędnie przeczytałem, czego szukał OP. – craigmichaelmartin

1

pomocą pętli:

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

Testowanie tego również – CtrlAltDelete

0

Aby osiągnąć oczekiwany rezultat, skorzystaj z poniższego

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

+0

To buduje ciąg (dziwnie ... "obj" zaczyna się jako tablica?), A nie obiekt. – Jacob

0

Następujące pracował dla mnie.

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

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

//loop through the arrays using the first one's 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); 
0

Można to zrobić przy użyciu javascript ES 6 nowa funkcja:

Na przykład:

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 } 
0

Wiem, że pytanie jest już roczek, ale tutaj jest rozwiązanie jednokreskowe:

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