1. 程式人生 > 實用技巧 >js乾貨 -- 處理資料(二維陣列轉一維陣列)

js乾貨 -- 處理資料(二維陣列轉一維陣列)

原資料 為以下格式:

var arr = [
        {
          name: "lili",
          proList: [
            { paramKey: "color", paramName: "顏色", paramsContent: '紅白綠' },
            { paramKey: "size", paramName: "尺寸",  paramsContent: '大小' },
          ],
        },
        {
          name: "hua",
          proList: [
            { paramKey: 
"volume", paramName: "體積", paramsContent: '5,10,15' }, { paramKey: "mass", paramName: "質量", paramsContent: '1,2,3' }, ], }, ]; var standardList = [ { paramKey: "color", paramName: "顏色" }, { paramKey: "mass", paramName: "質量" }, { paramKey: "size", paramName: "尺寸" }, { paramKey:
"volume", paramName: "體積" }, ]

現需求要把arr.proList 中的資料按照standardList 列表 中 順序處理, 沒有standardList 中的paramKey 的新增上,paramsContent 為空即可

思考:

  • 如果通過陣列的迴圈去處理會很麻煩,迴圈新增會有大量重複,故決定將陣列轉成 物件
  • key為paramKey,標準陣列standardList 中 value 為paramName, 要處理的資料中 value 為paramsContent

編寫處理函式

1 // 二維陣列轉一維陣列
2 dimensionReduction(obj, tKey, okey, cKey) {
3 for (var i = 0; i < obj[tKey].length; i++) { 4 var item = obj[tKey][i]; 5 obj[okey][item["paramKey"]] = item[cKey]; 6 } 7 return obj; 8 },

進行處理

1 arr.map((item) => {
2      item.proObj = {};
3      if (item.proList) {
4           this.dimensionReduction(item, "proList", "proObj", "paramsContent");
5      }
6  });
7 console.log(arr);

以上資料就滿足所需要的資料了

應用場景:商品的比價

  不同商品之間比較的引數是不固定的,需要先取並集,然後按照並集順序補充引數,最後轉換成可以迴圈的引數

效果圖如下圖:

分享一刻:

proselint

一個命令列程式,用來檢查英文文章是否有語義錯誤。