数组中的嵌套对象 - 对象破坏es6

Try*_*nJS 5 javascript ecmascript-6

所以我知道你可以做对象破坏,如: const { item } = data;

阵列破坏也像: const [ item ] = data;

您也可以在函数参数中执行此操作,例如: const x = ({ item }) => item;

我已经看到了很多问题和答案.但是我没有看到数组中嵌套对象的示例和很好的解释.


const test = [{ count: 1 }];

const [{ count }] = test;
Run Code Online (Sandbox Code Playgroud)

我通常会这样做:

const x = test[0];

const { count } = x;
Run Code Online (Sandbox Code Playgroud)

直到今天,在codepen中进行测试时,我发现你可以在同一个任务中对它们进行析构.

有人能解释我在做什么[{ count }]吗?因为我正在进行数组破坏,const [] = test但我没有破坏任何东西,所以显然失败了.如果我{ count }在那之内我得到了我想要的价值.

我无法分解它以了解它是如何工作的.我假设[] = testtest[0]我一样{ count } = test[0].但我只是想了解它的工作原理.

我确实浏览了一些MDN文档和内容,但我找不到上面提到的上述场景的好解释.

谢谢!

adi*_*iga 8

嵌套解构有时会令人困惑。您可以随时查看Babel 编译器以获取等效的 ES5 并了解其工作原理

所以,这段代码:

const test = [{ count: 0 }, { whatever: 1 }, { total: 2 }];
const [{ count }, , { total }] = test

console.log(count, total)
Run Code Online (Sandbox Code Playgroud)

被传输到:

var count = test[0].count;
var total = test[2].total;
Run Code Online (Sandbox Code Playgroud)

如您所见,index = 1项目被忽略(MDN),我们只是在解构0th 和2nd 索引属性

由于我们讨论的是解构数组对象的主题,因此可以以更高级的方式使用它。您可以像这样在任何索引处解构项目:

var count = test[0].count;
var total = test[2].total;
Run Code Online (Sandbox Code Playgroud)

这将获取 index 处的计数2。此代码等效于:

var count = test[2].count;
Run Code Online (Sandbox Code Playgroud)

请注意,我们在{}这里使用而不是[]. 这指示编译程序,以获得count关键2。您还可以length使用这种类型的解构获取数组的 :

const { length } = test; // same as test.length 
Run Code Online (Sandbox Code Playgroud)

您可以使用计算对象属性名称使其更加动态:

const test = [{ count: 0 }, { count: 1 }, { count: 2 }];

const { 2: { count } } = test;

console.log(count)
Run Code Online (Sandbox Code Playgroud)