什么是更短的版本?:
from = hash.fetch(:from)
to = hash.fetch(:to)
name = hash.fetch(:name)
# etc
Run Code Online (Sandbox Code Playgroud)
请注意fetch,如果密钥不存在,我想引发错误.
必须有更短的版本,例如:
from, to, name = hash.fetch(:from, :to, :name) # <-- imaginary won't work
Run Code Online (Sandbox Code Playgroud)
如果需要,可以使用ActiveSupport.
由于对象键是字符串,因此它们可以包含任何类型的字符和特殊字符.我最近偶然发现了一个从API调用中收到的对象.该对象的键名称中包含" - ".
const object = {
"key-with-dash": []
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,解构不起作用,因为key-with-dash它不是有效的变量名.
const { key-with-dash } = object;
Run Code Online (Sandbox Code Playgroud)
所以我想到了一个问题.在这种情况下,我该如何解构物体呢?它甚至可能吗?
这三个表达式似乎是等价的:
a,b,c = line.split()
(a,b,c) = line.split()
[a,b,c] = line.split()
Run Code Online (Sandbox Code Playgroud)
他们编译成相同的代码吗?
哪一个更pythonic?
const a = {
b: {
c: 'Hi!'
}
};
const { b: { c } } = a;
Run Code Online (Sandbox Code Playgroud)
b在这种情况下可以重命名吗?我想要获取c并重命名b.
在我的一个无状态功能组件中设置默认值时,我刚刚遇到了关于React性能的问题.
这个组件有一个defaultProps定义的row: false,但我不喜欢它,因为defaultProps它位于文件的末尾,这实际上使它更难看.因此,我们不知道默认属性.所以我直接将它移动到函数声明中,并使用参数的ES6默认值进行分配.
const FormField = ({
row = false,
...others,
}) => {
// logic...
};
Run Code Online (Sandbox Code Playgroud)
但后来我们与一位同事争论这是一个好主意.因为这样做可能看起来微不足道,但也可能对性能产生很大影响,因为反应不知道默认值.
我相信在这种情况下,它是微不足道的.因为它是布尔值而不是对象/数组,因此在对帐期间不会被视为不同的值.
但是,让我们现在看一个更高级的用例:
const FormField = ({
input: { name, value, ...inputRest },
label = capitalize(name),
placeholder = label,
row = false,
meta: { touched, error, warning },
...others,
}) => {
// logic...
};
Run Code Online (Sandbox Code Playgroud)
在这里,我基于placeholderfrom 的值label,它本身就是基于的input.name.使用ES6解构和参数的默认值使整个事情很容易编写/理解,它就像一个魅力. …
在Javascript ES6中,您可以像这样构造数组:
const [a,b,...rest] = someArray;
Run Code Online (Sandbox Code Playgroud)
其中a是该阵列中的第一个元素,b是第二个,rest是与剩余的元件的阵列.
我知道在C#7中你可以在赋值时解构元组,但是找不到任何与解构数组/枚举相关的东西:
var (a,b) = someTuple;
Run Code Online (Sandbox Code Playgroud)
我有一个IEnumerable我需要第一个和第二个元素作为变量的地方,我需要其余的元素作为另一个IEnumerable.我有一个解决方案,但觉得解构会看起来更干净.
function f([a,b,c]) {
// this works but a,b and c are any
}
Run Code Online (Sandbox Code Playgroud)
有可能写出类似的东西吗?
function f([a: number,b: number,c: number]) {
// being a, b and c typed as number
}
Run Code Online (Sandbox Code Playgroud) 在JavaScript ES6中,有一种称为解构的语言功能.它也存在于许多其他语言中.
在JavaScript ES6中,它看起来像这样:
var animal = {
species: 'dog',
weight: 23,
sound: 'woof'
}
//Destructuring
var {species, sound} = animal
//The dog says woof!
console.log('The ' + species + ' says ' + sound + '!')
Run Code Online (Sandbox Code Playgroud)
我可以在C++中做些什么来获得类似的语法并模拟这种功能?
当我只对索引0之外的数组值感兴趣时,我可以避免在数组解构时声明无用的变量吗?
在下面,我想避免声明a,我只对索引1及更高版本感兴趣.
// How can I avoid declaring "a"?
const [a, b, ...rest] = [1, 2, 3, 4, 5];
console.log(a, b, rest);Run Code Online (Sandbox Code Playgroud)
背景
当我尝试使用数组解构赋值时,我能够预先声明我的变量:
let a, b, c;
let arr = [1, 2, 3, 4, 5];
[a, b, c] = arr;
console.log(a) // logs 1
console.log(b) // logs 2
console.log(c) // logs 3
Run Code Online (Sandbox Code Playgroud)
这通过了Babel编译器就好了.
但是,当我尝试对对象做同样的事情时,我收到了一个错误
let a, b, c
let obj = {cat: 'meow', dog: 'woof', mouse: 'squeak'};
{cat: a, dog: b, mouse: c} = obj;
console.log(a) // I want this to log 'meow'
console.log(b) // I want this to log 'woof'
console.log(c) // I want this to log 'squeak'
Run Code Online (Sandbox Code Playgroud)
题
这是ES6还是Babel的怪癖/问题?如果它是ES6的故意,为什么与数组的处理方式有所不同? …
destructuring ×10
javascript ×5
ecmascript-6 ×4
arrays ×2
babeljs ×1
c# ×1
c#-7.0 ×1
c++ ×1
c++17 ×1
hash ×1
object ×1
performance ×1
python ×1
reactjs ×1
rename ×1
ruby ×1
types ×1
typescript ×1