[英]JavaScript: Convert two-dimensional array with Map into Dictionary(nested Object)
我在二維數組中有一組值。 我映射了一個 Object 並制作了一個新數組。 第一個值key
是一個字符串,第二個值currentTasks[key]
是一個數組,其中每個值都有id
、 text
和date
。
const newArray = Object.keys(currentTasks).map(function(key){
return [key, currentTasks[key]];
});
newArray 有這樣的形式……
['1', {id:'1', text: "Todo item #1", date: '2021-11-30'}]
我想要做的是將 newArray 轉換為 Dictionary 的形式。 我想以 HashMap 形式將第一個值作為鍵,將第二個值作為值。 如何將這種形式的數組轉換為像鍵值對一樣的 hash map?
{
'1': {id:'1', text: "Todo item #1", date: '2021-11-30'},
'2': {id:'2', text: "Todo item #2", date: '2021-12-12'},
'3': {id:'3', text: "Todo item #3", date: '2021-11-29'},
'4': {id:'4', text: "Todo item #4", date: '2021-12-03'},
}
我想得到一個像這樣的嵌套 object 數組。
const testValues = [ ['1', {id:'1', text: "Todo item #1", date: '2021-11-30'}], ['2', {id:'2', text: "Todo item #2", date: '2021-12-12'}], ['3', {id:'3', text: "Todo item #3", date: '2021-11-29'}], ['4', {id:'4', text: "Todo item #4", date: '2021-12-03'}] ]; const outputObject = {}; testValues.forEach(x => { outputObject[x[0]] = x[1]; }); console.log(testValues, outputObject);
如果您想簡潔,我相信您正在尋找reduce數組方法。
reduce() 方法按順序對數組的每個元素執行用戶提供的“reducer”回調 function,並傳入前一個元素的計算返回值。 在數組的所有元素上運行 reducer 的最終結果是單個值。
您可以提供一個初始值,在這種情況下,它是一個 object 文字。 然后,您可以在每個子陣列上 map 並提供鍵:值對。
const array1 = [ ['1', {id:'1', text: "Todo item #1", date: '2021-11-30'}], ['2', {id:'2', text: "Todo item #2", date: '2021-12-12'}], ['3', {id:'3', text: "Todo item #3", date: '2021-11-29'}], ['4', {id:'4', text: "Todo item #4", date: '2021-12-03'}] ]; const reducer = (previousValue, currentValue) => ({...previousValue, [currentValue[0]]: currentValue[1]}); // {1: {…}, 2: {…}, 3: {…}, 4: {…}} console.log(array1.reduce(reducer, {})); // as a one liner // array1.reduce((a, b) => ({...a, [b[0]]: b[1]}), {})
或者您也可以使用Map
Map object 保存鍵值對並記住鍵的原始插入順序。 任何值(對象和原始值)都可以用作鍵或值。
const array1 = [ ['1', {id:'1', text: "Todo item #1", date: '2021-11-30'}], ['2', {id:'2', text: "Todo item #2", date: '2021-12-12'}], ['3', {id:'3', text: "Todo item #3", date: '2021-11-29'}], ['4', {id:'4', text: "Todo item #4", date: '2021-12-03'}] ]; const newMap = new Map() array1.forEach(el => newMap.set(el[1], el[0])) // 1: {…}, 2: {…}, 3: {…}, 4: {…} newMap.forEach((key, value) => console.log(key, value))
我猜這就是您要找的 output?:
const values = [ ['1', {id:'1', text: "Todo item #1", date: '2021-11-30'}], ['2', {id:'2', text: "Todo item #2", date: '2021-12-12'}], ['3', {id:'3', text: "Todo item #3", date: '2021-11-29'}], ['4', {id:'4', text: "Todo item #4", date: '2021-12-03'}] ] const obj = {}; values.map(val => obj[val[0]] = val[1]) console.log(obj)
使用Object.fromEntries
-
const input = [ {id:'1', text: "Todo item #1", date: '2021-11-30'}, {id:'2', text: "Todo item #2", date: '2021-12-12'}, {id:'3', text: "Todo item #3", date: '2021-11-29'}, {id:'4', text: "Todo item #4", date: '2021-12-03'}, ] const output = Object.fromEntries(input.map(x => [x.id, x])) console.log(output)
{
'1': {id:'1', text: "Todo item #1", date: '2021-11-30'},
'2': {id:'2', text: "Todo item #2", date: '2021-12-12'},
'3': {id:'3', text: "Todo item #3", date: '2021-11-29'},
'4': {id:'4', text: "Todo item #4", date: '2021-12-03'},
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.