在最基本的形式中,拥有一个对象数组:
如何使用解构来获取值
获取第一个值很容易:
使用rest运算符可以获取数组中的所有值:
let arr = [
{val:"a"},
{val:"b"}
];
如何使用解构来获取值
['a', 'b']
。获取第一个值很容易:
let [{val:res}] = arr; //res contains 'a'
使用rest运算符可以获取数组中的所有值:
let [...res] = arr; //res contains all objects
结合这些,我希望能够使用:
let [...{val:res}] = arr; //undefined, expected all 'val's (['a', 'b'])
上面的代码返回undefined(在FF中测试)。进一步的测试似乎表明,在使用对象解构时添加剩余操作符也不会使用迭代,而是返回原始对象,例如let [...{length:res}] = arr; //res= 2
。其他尝试,如let [{val:...res}] = arr;
或let [{val}:...res] = arr;
会产生语法错误。
使用其他方法也很容易做到,比如在数组上使用map
,但大多数情况下我都会在解构多个级别时遇到这个问题(一个包含自己属性的对象数组,其中包含一个数组)。因此,我真的在努力了解如何仅使用解构来解决它。
为方便起见:a test fiddle
编辑
如果我没有解释清楚问题的目标,我表示歉意。我不是在寻找特定问题的解决方案,而只是想找到正确的语法来使用解构。
否则,第一个问题是:在上面的示例中,为什么let [...{val:res}] = arr;
不返回所有值(['a', 'b']
)。第二个问题是:使用嵌套对象解构的rest操作符的正确语法是什么?(我很确定我在这里混淆了一些定义)。似乎后者不受支持,但我还没有遇到任何说明它为什么不支持的文档。
res
变成什么?“all vals”是什么? - Bergi['a', 'b']
(因为它是let [{val:res}] = arr;
和let [...res] = arr;
的组合) - Me.Name