![](/img/trans.png)
[英]create array object by add key value based on matching key in javascript
[英]Create an array of object based on first value as key and second value as value in javascript
樣本輸入:
[{'size': '56 X 56 X 190', 'no_of_ups': 5}, {'size': '65 X 55 X 110', 'no_of_ups': 2}]
相應的輸出:
[{'56 X 56 X 190': 5}, {'65 X 55 X 110': 2}]
我們如何從具有固定鍵數的對象的輸入數組創建對象數組,並創建新的對象數組,其中鍵的某些值作為鍵,值的某些值作為該鍵的值。
基本上,我們希望將 Object 的輸入數組轉換為'size'
值作為鍵,將'no_of_ups'
的值作為值。
最易讀的方法之一可能是使用普通的 JavaScript。
const output = input.map(({ size, no_of_ups }) => ({ [size]: no_of_ups }));
表達式({ size, no_of_ups }) => ({ [size]: no_of_ups })
可能有點混亂,但它只是一個普通的箭頭函數。
({ size, no_of_ups })
定義參數。 在這種情況下,我們將no_of_ups
為size
和no_of_ups的單個對象。
({ [size]: no_of_ups })
是箭頭函數的返回值。 我們將使用計算的屬性名稱來動態設置鍵的值並為其分配no_of_ups
的值。
請參閱返回對象的ECMAScript 6 箭頭函數,了解返回對象必須包含在括號中的原因。
(如果參數的順序看起來很奇怪,那是因為我假設 [ lodash/fp
模塊] 這是您要在參數上執行的函數:
f = _.compose(_.spread(_.zipObject),
_.unzip,
_.map(_.over(['size', 'no_of_ups'])));
它在行動中:
arr = [{'size': '56 X 56 X 190', 'no_of_ups': 5}, {'size': '65 X 55 X 110', 'no_of_ups': 2}]; f = _.compose(_.spread(_.zipObject), _.unzip, _.map(_.over(['size', 'no_of_ups']))); console.log(f(arr))
<script src="https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)"></script>
這里有一點解釋:
_.map(_.over(['size', 'no_of_ups']))
_.over(['size', 'no_of_ups'])
,
_.over(['size', 'no_of_ups'])
只是選擇元素的'size'
和'no_of_ups'
並將這兩個結果放入一個數組中),所以你得到一個數組數組,在這種情況下[["56 X 56 X 190", 5], ["65 X 55 X 110", 2]]
;_.unzip
從根本上轉置數組數組,在這種情況下給你[["56 X 56 X 190", "65 X 55 X 110"], [5, 2]]
_.spread(_.zipObject)
將兩個內部數組作為逗號分隔的參數提供給_.zipObject
,它從兩個數組中構造對象,將它們用作鍵數組和值數組,從而為您提供最終的結果。 如果您真的想要一個對象數組而不是單個對象,您可以將_.zipObject
更改為_.zipWith((x,y) => ({[x]: y}))
。
Input - [
{
'size': '56 X 56 X 190',
'no_of_ups': 5
}, {
'size': '65 X 55 X 110',
'no_of_ups': 2
}
]
Input.forEach((val) => {
j = {};
j[val[size]] = val[no_of_ups];
Output.push(j)
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.