这可能听起来很荒谬,但请耐心等待.我想知道在语言层面是否支持将对象解构为构造函数中的类属性,例如
class Human {
// normally
constructor({ firstname, lastname }) {
this.firstname = firstname;
this.lastname = lastname;
this.fullname = `${this.firstname} ${this.lastname}`;
}
// is this possible?
// it doesn't have to be an assignment for `this`, just something
// to assign a lot of properties in one statement
constructor(human) {
this = { firstname, lastname };
this.fullname = `${this.firstname} ${this.lastname}`;
}
}
Run Code Online (Sandbox Code Playgroud) 我知道我可以一次为多个值分配多个变量:
(foo, bar, baz) = 1, 2, 3
Run Code Online (Sandbox Code Playgroud)
并且foo = 1,bar = 2,依此类推.
但是,我如何才能使变量的名称更具动态性?也就是说,
somefunction(data,tupleofnames):
(return that each name mapped to a single datum)
somefunction((1,2,3),(foo,bar,baz))
Run Code Online (Sandbox Code Playgroud)
并有相同的?
是否可以在JavaScript类的构造函数中使用解构赋值来分配实例变量,类似于如何对常规变量执行此操作?
以下示例有效:
var options = {one: 1, two: 2};
var {one, two} = options;
console.log(one) //=> 1
console.log(two) //=> 2
Run Code Online (Sandbox Code Playgroud)
但我不能得到类似以下的东西:
class Foo {
constructor(options) {
{this.one, this.two} = options;
// This doesn't parse correctly and wrapping in parentheses doesn't help
}
}
var foo = new Foo({one: 1, two: 2});
console.log(foo.one) //=> I want this to output 1
console.log(foo.two) //=> I want this to output 2
Run Code Online (Sandbox Code Playgroud) 我正在尝试围绕解构任务进行实验。现在,我有一个案例,我试图应对自身的破坏。
例如,我有这样的输入:
let input = {latitude: "17.0009", longitude: "82.2108"}
Run Code Online (Sandbox Code Playgroud)
其中latitude,longitude键值是字符串,但我想在进行结构分解时将它们解析为数字。
let input = {latitude: "17.0009", longitude: "82.2108"}
Run Code Online (Sandbox Code Playgroud)
我可以在babel repl中看到这需要引用一个对象,然后访问每个键。因此,以上代码与以下代码相同:
"use strict";
var arr = {
latitude: "17.0009",
longitude: "82.2108"
};
var latitude = arr.latitude,
longitude = arr.longitude;
Run Code Online (Sandbox Code Playgroud)
我想做一些使用解构语法本身的事情。
"use strict";
var arr = {
latitude: "17.0009",
longitude: "82.2108"
};
var latitude = Number(arr.latitude),
longitude = Number(arr.longitude);
Run Code Online (Sandbox Code Playgroud)
我也很乐意看到一些技巧。
更新资料
我可以与,操作员一起提出一些建议:
let input = {latitude: "17.0009", longitude: "82.2108"}
let {latitude,longitude} = input
console.log(typeof latitude,typeof …Run Code Online (Sandbox Code Playgroud)有谁知道你是否可以在属性名称中使用带空格的对象解构?也许这不能做,我意识到JavaScript表示法不正确,但我无法更改服务器json响应.
var obj1 = {name: 'Mr Smith', age: 21};
//destructure
var {name, age} = obj1;
//name='Mr Smith' and age=21
Run Code Online (Sandbox Code Playgroud)
这按预期工作.
但是,当我有以下对象结构时,我可以使用对象解构吗?
var obj2 = {"my name": "Mr Jones", age: 22};
var {'my name', age} = obj2;
Run Code Online (Sandbox Code Playgroud)
如果这是不可能的话,如果我可以使用某种语法(例如'as')分配变量,这将是很好的...
var {'my name' as name, age} = obj2; //name='Mr Jones';
Run Code Online (Sandbox Code Playgroud)
谢谢
如何在对象破坏期间重命名目标?
const b = 6;
const test = { a: 1, b: 2 };
const {a, b as c} = test; // <-- `as` does not seem to be valid in ES6/ES2015
// a === 1
// b === 6
// c === 2
Run Code Online (Sandbox Code Playgroud) 我有一系列的值,如:
const arr = [1,2,3];
Run Code Online (Sandbox Code Playgroud)
有什么方法可以使用解构来创建以下输出?如果没有,我在ES6(或更高版本)中最简单的方法是什么?
const obj = {
one: 1,
two: 2,
three: 3
};
Run Code Online (Sandbox Code Playgroud)
我试过这个,但我猜它不起作用,因为这是计算键的语法:
const arr = [1,2,3];
const obj = {
[one, two, three] = arr
};
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个用数组内容填充字符串的函数,或者将它们设置为null.字符串的数量可以变化,我不想添加像它们一样的要求都是同一个数组或类的一部分.
在C#中你无法组合param和out.因此,这样做的唯一方法似乎是重载这样的方法:
public void ParseRemainders(string[] remainders, out string p1)
{
p1 = null;
if ((remainders != null) && (remainders.Length > 0))
p1 = remainders[0];
}
public void ParseRemainders(string[] remainders, out string p1, out string p2)
{
p1 = null;
p2 = null;
if (remainders != null)
{
ParseRemainders(remainders, out p1);
if (remainders.Length > 1)
p2 = remainders[1];
}
}
public void ParseRemainders(string[] remainders, out string p1, out string p2, out string p3)
{
p1 = null; …Run Code Online (Sandbox Code Playgroud) 是否可以在同时返回对象时对其进行解构.例如,要更改此代码:
const mapStateToProps = ({ newItem }) =>{
const { id, name, price } = newItem;
return { id, name, price };
}
Run Code Online (Sandbox Code Playgroud)
对于这样的事情:
const mapStateToProps = ({ newItem }) =>{
return { id, name, price } = newItem;
}
Run Code Online (Sandbox Code Playgroud) 我有一个组件,它接收一个看起来像这样的道具:
const styles = {
font: {
size: {
value: '22',
unit: 'px'
},
weight: 'bold',
color: '#663300',
family: 'arial',
align: 'center'
}
};
Run Code Online (Sandbox Code Playgroud)
我正在尝试更新该align属性,但是当我尝试更新该对象时,我最终仅用该align属性替换了整个对象。
这就是我更新它的方式:
const { ...styling } = styles;
const [style, setStyle] = useState(styling);
return (
<RadioButtonGroup
onChange={(event) => {
setStyle({ ...style, font: { align: event.target.value } });
console.log(style);
}}
/>);
Run Code Online (Sandbox Code Playgroud)
当我 console.logstyle我刚{"font":{"align":"left"}}回来。我希望看到整个对象的更新值align。我是解构的新手,所以我在这里做错了什么?
destructuring ×10
javascript ×7
ecmascript-6 ×5
arrays ×1
c# ×1
ecmascript-7 ×1
python ×1
reactjs ×1
typescript ×1