原數據 為以下格式:
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);

以上數據就滿足所需要的數據了
應用場景: 商品的比價
不同商品之間比較的參數是不固定的,需要先取並集,然后按照並集順序補充參數,最后轉換成可以循環的參數
效果圖如下圖:

分享一刻:
一個命令行程序,用來檢查英文文章是否有語義錯誤。
