簡體   English   中英

基於第一個值作為鍵和第二個值作為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_upssizeno_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.

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