cou*_*ing 3 javascript ecmascript-6
我想解释为什么这个函数的结果与我的期望不符.
const numbers = [ 1, 2 ]
const objects = [{f: 'a'}, {f: 'b'}]
async function(domain) {
let matrix = []
objects.forEach((object) => {
numbers.forEach((number) => {
object.number = number
matrix.push(object)
})
})
return matrix
}()
Run Code Online (Sandbox Code Playgroud)
结果,一旦承诺得到解决,就会返回:
[
{ f: 'a', number: 2 },
{ f: 'a', number: 2 },
{ f: 'b', number: 2 },
{ f: 'b', number: 2 }
]
Run Code Online (Sandbox Code Playgroud)
但是,我的期望是它会回归:
[
{ f: 'a', number: 1 },
{ f: 'a', number: 2 },
{ f: 'b', number: 1 },
{ f: 'b', number: 2 }
]
Run Code Online (Sandbox Code Playgroud)
令我最困惑的事情之一是,如果我console.log在推送之前获得对象的价值,它会在我预期的结果中注销掉每个对象.
因为对象是通过引用传递的,并且您正在修改原始对象,所以您可以推送新对象.
const numbers = [ 1, 2 ]
const objects = [{f: 'a'}, {f: 'b'}]
let matrix = []
objects.forEach((object) => {
numbers.forEach((number) => {
matrix.push({...object, number})
})
})
console.log(matrix)Run Code Online (Sandbox Code Playgroud)