在ES6中声明新数组?这是在做什么

时间:2018-09-07 18:17:39

标签: javascript

有人可以向我解释这是什么吗?

[blog.id]: blog

我假设它正在创建一个blog.id作为元素(示例ID /密钥为4)的新数组,而Blog是与该元素相等的内容集。

 export default function(state = {}, action) {
      switch (action.type) {
        case FETCH_BLOG:
          const blog = action.payload;
          return { ...state, [blog._id]: blog };
        case FETCH_BLOGS:
          return { ...state, ...mapKeys(action.payload, '_id') };
        default:
          return state;
      }
    }

2 个答案:

答案 0 :(得分:2)

这是一个计算的属性密钥:Computed property names (ES2015)Object Spread Syntax

它将创建一个新对象,其中包含state具有的所有键/值(...state的作用),其键的名称是属性blog._id的分辨率,其值是blog

因此,如果blog._id"foo",而blog"bar"

返回的对象是:

{
  "all": "the",
  "key": "vals",
  "state": "had",

  // along with the new key/val
  "foo": "bar"
}

答案 1 :(得分:0)

这是新的更方便的ES6语法:

a
a
a
as
as
as
add
add
add

这不起作用:

c:\srv> node                    
> blog = {_id:42}               
{ _id: 42 }                     

但将其包含在> {blog._id: blog} ({blog._id: blog}) ^ SyntaxError: Unexpected token . 中是

[]

另一种语法是dict开箱。让我们做两个变量:

> {[blog._id]: blog}            
{ '42': { _id: 42 } }           

您可以写

而不是> a = 1; b = 2 2
c = {a:a, b:b}

> c = {a, b} { a: 1, b: 2 } 可让您从字典中复制所有属性:

...

所以这行

> {...c}                        
{ a: 1, b: 2 }                  

return { ...state, [blog._id]: blog }; 对象复制所有内容,并添加一个包含键state和值blog._id的字段。类似于

blog