2016-08-24 101 views
6

我有兩個陣列:newParamArr[i]paramVal[i]從兩個陣列創建JavaScript對象

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 Recursion for creating a JSON object

Recursively looping through an object to build a property list

+0

請添加'newParamArr'和'paramVal'的數據以及想要的結果。 –

+0

@NinaScholz添加了示例 – CtrlAltDelete

+0

這與遞歸有什麼關係? –

回答

9

你的意思呢?

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

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

如果你使用lodash,有_.zipObject正是這種類型的東西。

+0

是的,這是我想要的結果,讓我測試它! – CtrlAltDelete

0

使用ECMAScript2015:

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

(EDIT)以前誤解想要的任擇議定書array:

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

這將返回一個單鍵對象數組;它不會把所有東西都組合成一個對象。你想要'減少',而不是。 – Jacob

+0

是的,誤解了OP正在尋找什麼。 – craigmichaelmartin

1

使用一個循環:

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

測試這一個以及 – CtrlAltDelete

0

爲了達到預期的結果,請使用以下

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

這會構建一個字符串(奇怪的是''obj'作爲一個數組開始?),而不是一個對象。 – Jacob

0

以下爲我工作。

//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

爲此,您可以使用JavaScript ES 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 } 
0

我知道這個問題已經一歲多,但這裏是一個單線解決方案:

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