当你的代码遇到AI,笛卡尔积(商品sku)的种类计算
最近chatGPT特别火,突发奇想的想到了用ai进行代码重构的话会不会有奇效,于是拿出了一段以前写的计算所有sku组合的代码
let arr1 = [["a", "b", "c"],["1", "2", "3"],["找", "和", "是"],["无语", "拒绝", "天啊"],
];
function cp(arr) {let count = 0;let finallyArr = [];let needCombinationArr = [];finallyArr = arr[count];for (let i = 0; i < arr.length-1; i++) {needCombinationArr = [finallyArr, arr[count + 1]];finallyArr = combination(needCombinationArr);count++;}return finallyArr
}
function combination(needCombinationArr) {let item1 = needCombinationArr[0];let item2 = needCombinationArr[1];let ji = [];for (let index1 = 0; index1 < item1.length; index1++) {const element1 = item1[index1];for (let index2 = 0; index2 < item2.length; index2++) {const element2 = item2[index2];let element = Array.isArray(element1) ? element1 : [element1];ji.push([...element, element2]);}}return ji;}
cp(arr1)
输入这段代码,让ai进行优化
ai输出
function cp(arr) {let finallyArr = arr[0];for (let i = 1; i < arr.length; i++) {finallyArr = combination(finallyArr, arr[i]);}return finallyArr}function combination(arr1, arr2) {console.log(arr1,arr2)let ji = [];for (let index1 = 0; index1 < arr1.length; index1++) {const element1 = arr1[index1];for (let index2 = 0; index2 < arr2.length; index2++) {const element2 = arr2[index2];let element = Array.isArray(element1) ? element1 : [element1];console.log(element1,element2)ji.push([...element, element2]);}}return ji;}cp(arr1)
可以看到,ai优化后的代码去掉了其实并没啥用的count,将needCombinationArr 的值直接用入参进行了接收,大大减少了代码量,还是挺简洁的。
分析一下代码,会发现cp函数其实主要功能就是循环调用combination,并将combination返回值再次传入给combination,是不是和数组方法reduce特别像呢,这次继续将原有代码进行传入,并让它使用reduce方法优化,生成后的代码如下:
let arr1 = [["a", "b", "c"],["1", "2", "3"],["找", "和", "是"],["无语", "拒绝", "天啊"],];function cp(arr) {return arr.reduce((pre, cur) => {let temp = [];pre.forEach(item1 => {dancur.forEach(item2 => {let element = Array.isArray(item1) ? item1 : [item1];temp.push([...element, item2]);});});return temp;});}cp(arr1)
当我尝试对ai再加入写上注释这个条件时
function cp(arr) {return arr.reduce((pre, cur) => {// 将上一次返回的结果和当前项进行组合,得到最新结果return combination([pre, cur]);});}function combination(needCombinationArr) {let item1 = needCombinationArr[0];let item2 = needCombinationArr[1];let ji = [];for (let index1 = 0; index1 < item1.length; index1++) {const element1 = item1[index1];for (let index2 = 0; index2 < item2.length; index2++) {const element2 = item2[index2];let element = Array.isArray(element1) ? element1 : [element1];ji.push([...element, element2]);}}return ji;}cp(arr1)
后面又试了将代码转为ts代码,发现也是可行的,这样看来以后的代码重构貌似真有可能可以让ai来实现了
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
