鍍金池/ 問答/數據分析&挖掘  網絡安全  HTML/ map循環(huán)嵌套,總是取得外層數組的最后一個值

map循環(huán)嵌套,總是取得外層數組的最后一個值

有兩組數組arr01和arr02
現在下把arr01數組中的某個字段添加到arr02中,現在問題 是最后得到的新數組總是arr01的最后一個字段

let arr01 = [
    {
        "account" : "000000000000"
    },
    {
        "account" : "111111111111"
    },
    {
        "account" : "2222222222222"
    }
];
let arr02 = [
    {
        "city" : "北京"
    },
    {
        "city" : "上海"
    },
    {
        "city" : "廣東"
    }
];
                
let newArr = [];
arr01.map((cur01,eq) => {
    arr01.map((cur02,index) => {
        cur02.account = cur01.account;
        return newArr.push(cur);
    })
})

最后結果:

newArr = [
    {
        "account" : "2222222222222",
         "city" : "北京"
    },
    {
        "account" : "2222222222222",
        "city" : "上海"
    },
    {
        "account" : "2222222222222",
        "city" : "廣東"
    },
    {
        "account" : "2222222222222",
         "city" : "北京"
    },
    {
        "account" : "2222222222222",
        "city" : "上海"
    },
    {
        "account" : "2222222222222",
        "city" : "廣東"
    },
    {
        "account" : "2222222222222",
         "city" : "北京"
    },
    {
        "account" : "2222222222222",
        "city" : "上海"
    },
    {
        "account" : "2222222222222",
        "city" : "廣東"
    }
];

我想得到的結果是:

newArr = [
    {
        "account" : "000000000000",
         "city" : "北京"
    },
    {
        "account" : "000000000000",
        "city" : "上海"
    },
    {
        "account" : "000000000000",
        "city" : "廣東"
    },
    {
        "account" : "111111111111",
         "city" : "北京"
    },
    {
        "account" : "111111111111",
        "city" : "上海"
    },
    {
        "account" : "111111111111",
        "city" : "廣東"
    },
    {
        "account" : "2222222222222",
         "city" : "北京"
    },
    {
        "account" : "2222222222222",
        "city" : "上海"
    },
    {
        "account" : "2222222222222",
        "city" : "廣東"
    }
];
回答
編輯回答
北城荒

map的返回值是一個數組,這個問題用forEach比較合適

let newArr = [];
arr01.forEach(a1 => {
    arr02.forEach(a2 => {
        newArr.push({
            account: a1.account,
            city: a2.city
        });
    });
});
2017年7月5日 18:43
編輯回答
心上人

你改變的是對象的引用地址 所有最后改變的影響前面push進去的了

var newArr = [];
arr01.forEach(v1 => {
    arr02.forEach(v2 => {
        newArr.push(Object.assign({}, v2, {
            account: v1.account
        }))
    })
})
console.log(newArr)
2018年1月31日 09:01
編輯回答
舊時光

哥們,問問題要把代碼排版好,不然看著很亂,都沒有心情回答問題。我已經給你排好了。


看你的問題,應該是要把兩個數組按序號對應合并成一個數組。而你的方法是有問題的,因為每次都是把 arr01 循環(huán)到最后一個元素,然后再把 arr02 里的數據改掉。

map 函數是返回一個新數組的,所以不用嵌套 map,直接循環(huán)一下重新組合數組就行。

參考下這個吧:

var arr = [];
arr01.forEach(function(value, index) {
    // 如果 arr02 里沒有對應序號的 city,就填空字符串,這個你可以根據需要自己改
    value.city = arr02[index] || '';
    arr.push(value)
})
console.log(arr)

或者:

var arr = [];
arr02.forEach(function(value, index) {
    // 如果 arr01 里沒有對應序號的 acdount,就填空字符串,這個你可以根據需要自己改
    value.account = arr01[index] || '';
    arr.push(value)
})
console.log(arr)

看你修改了問題,是要每個都對應修改,那就嵌套循環(huán)兩次,不需要使用 map,直接用 forEach。

var arr = [];
arr01.forEach(function(v, i) {
    arr02.forEach(function(vv, ii) {
        arr.push({
            account: v.account,
            city: vv.city
        })
    })
})
console.log(arr)
2017年2月7日 16:43
編輯回答
青瓷

首先,你的思路是沒有問題的,但是你使用

cur02.account = cur01.account;
return newArr.push(cur02);

上面的代碼你push的是cur02,js的對象賦值都是傳的引用,所以循環(huán)結束后的結果是:

// [arr02[0], arr02[1], arr02[2], arr02[0], arr02[1], arr02[2], arr02[0], arr02[1], arr02[2]]

在你最后一次循環(huán)的時候arr02里面每個對象的account值都變?yōu)榱?code>"2222222222222"。

所以,在push的時候你push一個新的對象進去,而不是已有對象的引用就可以解決問題了。另外,map改成forEach(mapforEach的使用場景不一樣)。

let newArr = [];
arr01.forEach(cur01 => {
    arr02.forEach(cur02 => {
        newArr.push({
            account: cur01.account,
            city: cur02.city
        });
    })
})
2017年7月13日 13:28