2016-08-24 5 views
6

2つの配列:newParamArr[i]paramVal[i]があります。 newParamArr[i]配列の2つの配列からJavaScriptオブジェクトを作成

値の例:paramVal[i]配列の ["Name", "Age", "Email"]

値の例: ["Jon", "15", "[email protected]"]

は、私は、同じオブジェクトで配列内のすべてのアイテムを配置するJavaScriptオブジェクトを作成する必要があります。例えば

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

ために2つの配列の長さは常に同じであるが、配列の長さが増加または減少させることができます。のように...

newParamArr.length === paramVal.lengthは常にtrueを返します。 ECMAScript2015使用

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

は、あなたはこれを意味しますか?あなたがlodashを使用している場合は

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

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

_.zipObjectは事のこのタイプのために正確にあります。期待される結果を達成するために

+0

はい、私が欲しかった結果です。テストしましょう! – CtrlAltDelete

0

:以下の記事のどれもが私の質問に答えるのを助けることができなかった

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

(EDIT)は以前たいOPを誤解しましたアレイ:

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

これは単一キーオブジェクトの配列を返します。すべてを1つのオブジェクトにまとめません。あなたは代わりに 'reduce'を使いたいでしょう。 – 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

を、しかし、ここには1行の解決策があります:

Object.assign(...newParamArr.map((v, i) => ({[v]: paramVal[i]}))); 
関連する問題