簡體   English   中英

從鍵數組和值數組創建 object

[英]Create an object from an array of keys and an array of values

我有兩個 arrays: newParamArrparamVal

newParamArr數組中的示例值: [ "Name", "Age", "Email" ]

paramVal數組中的示例值: [ "Jon", 15, "jon@gmail.com" ]

我需要創建一個 JavaScript object 將數組中的所有項目放在同一個 object 中。 例如{ [newParamArr[0]]: paramVal[0], [newParamArr[1]]: paramVal[1], ... }

在這種情況下,結果應該是{ Name: "Jon", "Age": 15, "Email": "jon@gmail.com" }

兩個 arrays 的長度始終相同,但 arrays 的長度可以增加或減少。 這意味着newParamArr.length === paramVal.length將始終保持不變。

以下帖子都無法幫助回答我的問題:

Javascript 遞歸用於創建 JSON object

遞歸循環通過 object 構建屬性列表

 var keys = ['foo', 'bar', 'baz']; var values = [11, 22, 33] var result = {}; keys.forEach((key, i) => result[key] = values[i]); console.log(result);

或者,您可以使用Object.assign

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

或對象傳播語法(ES2018):

result = keys.reduce((o, k, i) => ({...o, [k]: values[i]}), {})

Object.fromEntries (ES2019):

Object.fromEntries(keys.map((_, i) => [keys[i], values[i]]))

如果您正在使用 lodash,那么_.zipObject正是針對這種類型的。

使用 ECMAScript2015:

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

(編輯)以前誤解了 OP 想要一個數組:

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

我在幾個地方需要這個所以我做了這個功能......

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} 

我知道這個問題已經有一年了,但這里有一個單行解決方案:

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

以下對我有用。

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

您可以使用Object.assign.apply()將一組 {key:value} 對合並到您要創建的對象中:

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}

查看文檔了解更多

Object.fromEntries 接受一組鍵值元組並將壓縮結果作為對象返回:

Object.fromEntries(keys.map((key, index)=> [key, values[index]]))

使用循環:

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

這個對我有用。

 var keys = ['foo', 'bar', 'baz']; var values = [11, 22, 33] var result = {}; keys.forEach(function(key, i){result[key] = values[i]}); console.log(result);

要達到預期效果,請使用以下內容

var newParamArr = ["Name", "Age", "Email"];
var paramVal = ["Jon", "15", "jon@gmail.com"];
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

您可以使用 javascript 計算屬性名稱來執行此操作:

例如:

 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 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM