在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ 商品sku數(shù)組的實(shí)現(xiàn),最好是用reduce

商品sku數(shù)組的實(shí)現(xiàn),最好是用reduce

原始數(shù)組,數(shù)組不固定,可能有多個,id和name不同,sid可以相同(相同屬于同一類)

var arr = [
    { "id": "1", "sid": "mm", "name": "黑色" },
    { "id": "2", "sid": "mm", "name": "白色" },
    { "id": "3", "sid": "xx", "name": "64G" },
    { "id": "4", "sid": "xx", "name": "128G" },
    { "id": "5", "sid": "yy", "name": "normal" },
    { "id": "6", "sid": "yy", "name": "plus" }
]

結(jié)果組成

var arr2 = [
    { name: '黑色,64G,normal', attrs: [{ "id": "1", "sid": "mm", "name": "黑色" }, { "id": "3", "sid": "xx", "name": "64G" }, { "id": "5", "sid": "yy", "name": "normal" }] },
    { name: '黑色,64G,plus', attrs: [{ "id": "1", "sid": "mm", "name": "黑色" }, { "id": "3", "sid": "xx", "name": "64G" }, { "id": "6", "sid": "yy", "name": "plus" }] },
    { name: '黑色,128G,normal', attrs: [{ "id": "1", "sid": "mm", "name": "黑色" }, { "id": "4", "sid": "xx", "name": "128G" }, { "id": "5", "sid": "yy", "name": "normal" }] },
    { name: '黑色,128G,plus', attrs: [{ "id": "1", "sid": "mm", "name": "黑色" }, { "id": "4", "sid": "xx", "name": "128G" }, { "id": "6", "sid": "yy", "name": "plus" }] },
    { name: '白色,64G,normal', attrs: [{ "id": "2", "sid": "mm", "name": "白色" }, { "id": "3", "sid": "xx", "name": "64G" }, { "id": "5", "sid": "yy", "name": "normal" }] },
    { name: '白色,64G,plus', attrs: [{ "id": "2", "sid": "mm", "name": "白色" }, { "id": "3", "sid": "xx", "name": "64G" }, { "id": "6", "sid": "yy", "name": "plus" }] },
    { name: '白色,128G,normal', attrs: [{ "id": "2", "sid": "mm", "name": "白色" }, { "id": "4", "sid": "xx", "name": "128G" }, { "id": "5", "sid": "yy", "name": "normal" }] },
    { name: '白色,128G,plus', attrs: [{ "id": "2", "sid": "mm", "name": "白色" }, { "id": "4", "sid": "xx", "name": "128G" }, { "id": "6", "sid": "yy", "name": "plus" }] },
]

如果

var arr = [
    { "id": "1", "sid": "mm", "name": "黑色" },
    { "id": "2", "sid": "mm", "name": "白色" },
    { "id": "3", "sid": "xx", "name": "64G" },
    { "id": "4", "sid": "xx", "name": "128G" }
    ]
var arr2 = [
    { name: '黑色,64G', attrs: [{ "id": "1", "sid": "mm", "name": "黑色" }, { "id": "3", "sid": "xx", "name": "64G" }] },
    { name: '黑色,128G', attrs: [{ "id": "1", "sid": "mm", "name": "黑色" }, { "id": "4", "sid": "xx", "name": "128G" }] },
    { name: '白色,64G', attrs: [{ "id": "2", "sid": "mm", "name": "白色" }, { "id": "3", "sid": "xx", "name": "64G" }] },
    { name: '白色,128G', attrs: [{ "id": "2", "sid": "mm", "name": "白色" }, { "id": "4", "sid": "xx", "name": "128G" }] },
]
回答
編輯回答
痞性

按照當(dāng)前重組對象(就算寫在reduce也是一樣的,還是純函數(shù)的形式重組你的對象),等于說就是sid一樣的抽一個出來,然后重新組成一個對象放到另外一個數(shù)組里。大致思路就這樣

2017年6月11日 20:47
編輯回答
柚稚

經(jīng)過大佬指點(diǎn),了解了這是笛卡爾積,參考了笛卡爾積算法
本題的解析如下,代碼有點(diǎn)亂,請諒解

function descartes() {
    let newObj = {}
    let newArr = [];
    arr.forEach((item, index) => {
        if (newObj.hasOwnProperty(item.sid)) {
            newObj[item.sid].push(item)
        } else {
            newObj[item.sid] = [];
            newObj[item.sid].push(item);
        }
    })
    newArr = Object.values(newObj);
    let arr1;
    arr1 = newArr[0].map((item) => {
        return { name: item.name, attrs: [item] }
    })
    newArr[0] = arr1;
    if (newArr.length === 1) {
        return arr1;
    } else {
        return newArr.reduce((col, set) => {
            let res = [];
            col.forEach((c) => {
                set.forEach((s) => {
                    let t = { name:"", attrs: [] }
                    t.attrs = t.attrs.concat(c.attrs);
                    t.attrs.push(s);
                    t.name = c.name + s.name;
                    res.push(t);
                })
            });
            return res;
        });
    }
}
let arr2 = descartes();
console.log(JSON.stringify(arr2))
2017年3月25日 23:41