Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的排列运算符显示这种行为?_Javascript - Fatal编程技术网

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 }