簡體   English   中英

使用lodash將數組轉換為對象

[英]convert array to object using lodash

我需要將數組或數組數組轉換為具有從名稱數組命名的鍵​​的對象。 例:

//given names
    names = ['first', 'second', 'third', 'fourth'] 
//array
    param = [1, 2, 3, 4] 
//becomes 
    result = {first: 1, second: 2, third: 3, fourth: 4}

//array of arrays 
    param = [
      [1, 2, 3, 4],
      [-4, 3, 1, 32],
    ]
//becomes
    result = [
      {first: 1, second: 2, third: 3, fourth: 4},
      {first: -4, second: 3, third: 1, fourth: 32},
    ]

我目前的解決方案是:

    var names = ['first', 'second', 'third', 'forth'];

    function arrayToObject(array, names) {
      var result = {};
      for (var i = 0; i < array.length; i++) {
        if (typeof array[i] === 'object') {
          result[i] = arrayToObject(array[i], names);
          continue;
        }
        result[names[i]] = array[i];
      }
      return result;
    }

這個解決方案的問題是它總是返回一個對象,雖然它應該在我傳入一個數組數組時返回一個對象數組。 有沒有辦法用lodash做到這一點,我沒有看到它?

Vanilla JS:一個從數組創建對象的函數:

function toObj(arr) {
  return arr.reduce(function(p, c, i) {
    p[names[i]] = c;
    return p;
  }, {});
}

map

var out = arr.map(toObj);

DEMO

您可以使用_.zipObject()將兩個數組壓縮為一個對象。 您實際上是將帶有標頭的CSV數據映射到JavaScript對象。

您可以嘗試搜索JavaScript CSV轉換器。 你可能會發現一些有趣的結果。

 // Given names var names = [ 'first', 'second', 'third', 'fourth' ]; // Array var param = [ 1, 2, 3, 4 ]; // Becomes var result = _.zipObject(names, param); document.body.innerHTML = JSON.stringify(result, null, 2); // Array of arrays var param = [ [ 1, 2, 3, 4 ], [ -4, 3, 1, 32 ], ]; // Becomes var result = _.chain(param).map(function(p) { return _.zipObject(names, p) }).value(); document.body.innerHTML += '\\n\\n' + JSON.stringify(result, null, 2); 
 body { font-family: monospace; white-space: pre; } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.6.1/lodash.min.js"></script> 

暫無
暫無

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

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