说我有一个对象:
elmo = {
color: 'red',
annoying: true,
height: 'unknown',
meta: { one: '1', two: '2'}
};
Run Code Online (Sandbox Code Playgroud)
我想用一个属性的子集创建一个新对象.
// pseudo code
subset = elmo.slice('color', 'height')
//=> { color: 'red', height: 'unknown' }
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) 我有一个对象.我想通过删除除某些特定属性之外的所有属性来修改对象(而不是克隆它).例如,如果我开始使用此对象:
var myObj={
p1:123,
p2:321,
p3:{p3_1:1231,p3_2:342},
p4:'23423',
//....
p99:{p99_1:'sadf',p99_2:234},
p100:3434
}
Run Code Online (Sandbox Code Playgroud)
并且只想要属性p1,p2和p100,我该如何获得这个对象:
var myObj={
p1:123,
p2:321,
p100:3434
}
Run Code Online (Sandbox Code Playgroud)
我理解如何用蛮力做到这一点,但想要一个更优雅的解决方案.
说,我有一个对象:
const user = {_id: 1234, firstName: 'John', lastName: 'Smith'}
Run Code Online (Sandbox Code Playgroud)
我想创建另一个没有_id密钥的对象:
const newUser = {firstName: 'John', lastName: 'Smith'}
Run Code Online (Sandbox Code Playgroud)
我用这个:
const newUser = Object.assign({}, {firstName: user.firstName, lastName: user.lastName})
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
最好用例子来解释.以下工作在es6中创建一个由现有对象的一些键组成的对象:
var o = {a:1, b: 2, c: 3}
var {a, c} = o
var subsetObj = {a, c} // will be: {a:1, c:3}
Run Code Online (Sandbox Code Playgroud)
这里有两个缺点:
a和c变量来污染局部变量范围,除非作为创建子集对象的方法.有没有办法在一个声明中完成相同的事情,而不引入不必要的本地人a和c?
我正在做一个关于react/redux的简单教程,我不明白为什么我们必须在render()方法中做
const {images,selectedImage} = this.state;
我理解我们需要将先前定义的变量分配给构造函数,因此它成为我们组件状态的一部分,而不仅仅是在我们的组件中浮动的变量,但是我不明白为什么我们不能直接在它们中访问它们.渲染方法以后?我也不明白为什么它们被定义为常量?我也不明白为什么他们被分配到州,为什么他们有括号aroudn他们?非常感谢你的帮助
import React, {Component} from 'react'
const flickrImages = [
"https://farm2.staticflickr.com/1553/25266806624_fdd55cecbc.jpg",
"https://farm2.staticflickr.com/1581/25283151224_50f8da511e.jpg",
"https://farm2.staticflickr.com/1653/25265109363_f204ea7b54.jpg",
"https://farm2.staticflickr.com/1571/25911417225_a74c8041b0.jpg",
"https://farm2.staticflickr.com/1450/25888412766_44745cbca3.jpg"
];
export default class Gallery extends Component {
constructor(props) {
super(props);
this.state = {
images: flickrImages,
selectedImage: flickrImages[0]
}
}
handleThumbClick(selectedImage) {
this.setState({
selectedImage
})
}
render() {
const {images, selectedImage} = this.state; // why do we have to do this? And why does this need to be a constant?
return (
<div className="image-gallery">
<div className="gallery-image">
<div>
<img src={selectedImage} /> …Run Code Online (Sandbox Code Playgroud) 我想使用ES6解构来分配对象的属性,但无法弄清楚语法.
<= ES5:
var dst = {}; // already in existence, with its own props, methods, etc.
var src = { a: 'foo', b: 'bar', c: 'baz' };
dst.a = src.a;
dst.b = src.b;
Run Code Online (Sandbox Code Playgroud)
> = ES6(我自己编写的,不工作的语法):
let dst = {};
let src = { a: 'foo', b: 'bar', c: 'baz' };
dst[{a, b}] = src;
Run Code Online (Sandbox Code Playgroud)
是否可以在对象上使用解构赋值?什么是正确的语法?
编辑:在我的用例中,dst是一个在需要合并src属性的子集之前存在的对象; 它不是一个仅为"借用"而创建的新对象src.
有没有办法在JavaScript中构造一个对象并将其作为别名的本地解构对象?
就像是:
const env = {ENV_VAR_X, ENV_VAR_Y, ENV_VAR_Z} = process.env;
Run Code Online (Sandbox Code Playgroud)
...并且已env成为包含所选环境变量的局部常量.(我知道我的例子不适用于babel)
{
ENV_VAR_X: "s867c7dsj4lal7",
ENV_VAR_Y: "hd73m20s-a=snf77f",
ENV_VAR_Z: "production"
}
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这种混叠?
另外,我使用babel作为我的转换程序,然后使用节点运行脚本,以便我可以利用更多ECMAScript 6功能.
是否可以使用解构赋值语法来将数据对象提取到另一个对象而不是不同的变量中?
产生不同变量的示例 (foo, bar):
var {p: foo, q: bar} = {p: 42, q: true};
console.log(foo); // 42
console.log(bar); // true Run Code Online (Sandbox Code Playgroud)
相反,我需要创建一个包含以下属性的新对象:
var n = {
foo: 42,
bar: true
}
Run Code Online (Sandbox Code Playgroud) 我似乎不记得如何编写这个解构模式,你能帮我吗?
假设我有一个这样的对象:
{
id: 'po_495743057439095',
object: 'payout',
amount: 18560,
arrival_date: 1576195200,
automatic: true,
balance_transaction: 'txn_32472309478903284',
created: 1575774863,
currency: 'eur',
description: 'STRIPE PAYOUT',
destination: 'ba_329047329048323',
failure_balance_transaction: null,
failure_code: null,
failure_message: null,
livemode: true,
metadata: {},
method: 'standard',
source_type: 'card',
statement_descriptor: null,
status: 'in_transit',
type: 'bank_account',
}
Run Code Online (Sandbox Code Playgroud)
(这实际上是来自 Stripe API 的一个对象)。
我想将这个对象推送到我的自定义数组中,但只保留 5 个字段。
我可以:
arr.push({
id: myObject.id,
object: myObject.object,
amount: myObject.amount,
arrival_date: myObject.arrival_date,
created: myObject.created
})
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有任何语法可以帮助我以更短的方式实现相同的目标。
基本上我很确定有一种语法可以做到这一点,只需要编写一次“myObject”一词,编写每个键名称一次,并且不创建临时变量,但我不记得如何实现。
我不是在询问编写特定的函数,我不需要帮助。我只是问是否有内置的解构语法可以做到这一点,因为我很确定有,但我找不到它,尽管之前搜索了相当长的时间。
编辑:
我正在寻找的答案就在这里:Elegant way to copy a part of an object