相关疑难解决方法(0)

如何获取javascript对象属性的子集

说我有一个对象:

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)

我怎么能实现这个目标?

javascript

349
推荐指数
17
解决办法
15万
查看次数

在退货声明中进行ES6解构

是否可以在同时返回对象时对其进行解构.例如,要更改此代码:

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)

javascript destructuring ecmascript-6

17
推荐指数
1
解决办法
6430
查看次数

仅保留JavaScript对象中的某些属性

我有一个对象.我想通过删除除某些特定属性之外的所有属性来修改对象(而不是克隆它).例如,如果我开始使用此对象:

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)

我理解如何用蛮力做到这一点,但想要一个更优雅的解决方案.

javascript

16
推荐指数
6
解决办法
8575
查看次数

在JavaScript中从对象复制某些属性的最有效方法是什么?

说,我有一个对象:

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)

有一个更好的方法吗?

javascript ecmascript-6

13
推荐指数
3
解决办法
6930
查看次数

创建子集对象,仅包含现有对象的某些属性

最好用例子来解释.以下工作在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)

这里有两个缺点:

  1. 它花了两个参数和两行来创建所需的子集对象
  2. 我们不得不通过创建本地不需要的中间变量ac变量来污染局部变量范围,除非作为创建子集对象的方法.

有没有办法在一个声明中完成相同的事情,而不引入不必要的本地人ac

javascript ecmascript-6

9
推荐指数
1
解决办法
8585
查看次数

这个render方法做了什么:const {images,selectedImage} = this.state;?

我正在做一个关于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)

reactjs redux react-redux

8
推荐指数
1
解决办法
5563
查看次数

具有解构的对象属性赋值?

我想使用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 variable-assignment ecmascript-6

7
推荐指数
1
解决办法
1591
查看次数

JavaScript对象解构和别名

有没有办法在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功能.

javascript ecmascript-6 babeljs

7
推荐指数
2
解决办法
3032
查看次数

解构赋值以构建新对象 - 有可能吗?

是否可以使用解构赋值语法来将数据对象提取到另一个对象而不是不同的变量中?

产生不同变量的示例 (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)

javascript ecmascript-6 babeljs

7
推荐指数
1
解决办法
8092
查看次数

解构 JavaScript 对象时如何只选择几个字段?

我似乎不记得如何编写这个解构模式,你能帮我吗?

假设我有一个这样的对象:

{
  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

javascript destructuring ecmascript-6

7
推荐指数
1
解决办法
5179
查看次数