Javascript 为什么我的排列运算符显示这种行为?
首先,如果这个问题对您来说很简单,我很抱歉,但是我很难理解代码段的返回语句是如何工作的,我非常感谢您的帮助Javascript 为什么我的排列运算符显示这种行为?,javascript,Javascript,首先,如果这个问题对您来说很简单,我很抱歉,但是我很难理解代码段的返回语句是如何工作的,我非常感谢您的帮助 let schools = [ { name: "Yorktown"}, { name: "Stratford" }, { name: "Washington & Lee"}, { name: "Wakefield"} ] let updatedSchools = editName("Stratford", "HB Woodlawn", schools) console.log(
let schools = [
{ name: "Yorktown"},
{ name: "Stratford" },
{ name: "Washington & Lee"},
{ name: "Wakefield"}
]
let updatedSchools = editName("Stratford", "HB Woodlawn", schools)
console.log( updatedSchools[1] ) // { name: "HB Woodlawn" }
const editName = (oldName, name, arr) =>
arr.map(item => {
if (item.name === oldName) {
// what is happening below!?
return {
...item,
name
}
} else {
return item
}
})
所以我希望updatedSchool
是(即使它的语法无效):
为什么它会产生
{name:“HB Woodlawn”}
?简单地一步一步地去糖表达
[
{name: "Yorktown"},
{ name: "Yorktown", "HB Woodlawn"},
{ name: "Washington & Lee"},
{ name: "Wakefield"}
]
第一个{name}
是{name:name}
然后{…obj}
与对象相同。赋值({},obj)
将这两种方法结合在一起就得到了Object.assign({},obj,{name:name})
给定obj={name:'Stratford'}
只有一个属性name
,它只需创建新对象并用新对象替换名称即可
您可以阅读有关对象的信息。只需一步一步地对表达式进行赋值
[
{name: "Yorktown"},
{ name: "Yorktown", "HB Woodlawn"},
{ name: "Washington & Lee"},
{ name: "Wakefield"}
]
第一个{name}
是{name:name}
然后{…obj}
与对象相同。赋值({},obj)
将这两种方法结合在一起就得到了Object.assign({},obj,{name:name})
给定obj={name:'Stratford'}
只有一个属性name
,它只需创建新对象并用新对象替换名称即可
您可以阅读有关对象分配的信息
return{//spread运算符指定项的现有属性
…项,//到新返回的对象
名称//类似于返回对象.assign(项,{name:name})
}
return{//spread运算符指定项的现有属性
…项,//到新返回的对象
名称//类似于返回对象.assign(项,{name:name})
}
rest参数可以用于支持它的浏览器中的对象和数组。如果你想理解代码,最好是浏览一下
editSchools
是一个采用oldName
、name
和数组的函数。它返回从数组
到新数组的映射结果。新数组中的每个元素都由执行的回调函数map
确定。如果项
的名称
属性等于旧名称
,则将创建一个新对象,该对象将取代它,{…项,名称}
。这就是困惑所在
它做了一些奇怪的事情。新对象接收项
对象的所有键,然后将名称
属性定义(或重新定义)为提供给编辑学校
的名称
的值
因此,本质上,此代码查找具有值为oldName
的name
键的对象,并将其替换为一个相同的新对象,该新对象的name
属性更改为新的name
值。
editSchools
是一个采用oldName
、name
和数组的函数。它返回从数组
到新数组的映射结果。新数组中的每个元素都由执行的回调函数map
确定。如果项
的名称
属性等于旧名称
,则将创建一个新对象,该对象将取代它,{…项,名称}
。这就是困惑所在
它做了一些奇怪的事情。新对象接收项
对象的所有键,然后将名称
属性定义(或重新定义)为提供给编辑学校
的名称
的值
因此,本质上,此代码查找具有值为oldName
的name
键的对象,并将其替换为一个相同的新对象,该新对象的name
属性更改为新的name
值。数组以id 0作为第一个条目开始,在大多数编程语言中,第二项为什么包括“HB Woodlawn”
和“Yorktown”
?数组以id 0作为第一项开始,在大多数编程语言中,第二项为什么包括“HB Woodlawn”
和“Yorktown”
?有趣的事情:o。谢谢没问题。顺便说一句,您可以使用babeljs.io repl为您制作此desugaring。有趣的事情发生了:o。谢谢没问题。顺便说一句,您可以使用babeljs.io repl为您制作此desugaring。
{...item, name }