我试图解构一个对象并将取出的变量应用到它自己的对象中.
例如,对象beforeTest包含a,b,c,d
我想把{a,b}输出并添加到afterTest对象.
就像是...
let afterTest = { a, b } = beforeTest
Run Code Online (Sandbox Code Playgroud)
以下是有效的,但是当你有很多变量时它们并不是很漂亮.
let { a, b } = beforeTest;
let afterTest = Object.assign({}, a, b); //EDIT: This doesn't actually do what I intended, see comment on my question
Run Code Online (Sandbox Code Playgroud)
谁知道有更好的方法来写这个?
谢谢
特定
var arr = [1,2,true,4,{"abc":123},6,7,{"def":456},9,[10]]
Run Code Online (Sandbox Code Playgroud)
我们可以arr使用Number构造函数过滤数组中的数字项
var res = arr.filter(Number); // [1, 2, true, 4, 6, 7, 9, Array[1]]
Run Code Online (Sandbox Code Playgroud)
是true和[10]预期在所得数组?如果我们替换false了true在arr
var arr = [1,2,false,4,{"abc":123},6,7,{"def":456},9,[10]]
var res = arr.filter(Number) // [1, 2, 4, 6, 7, 9, Array[1]]
Run Code Online (Sandbox Code Playgroud)
运用 Array.isArray
var res = arr.filter(Array.isArray) // [Array[1]]
Run Code Online (Sandbox Code Playgroud)
String
var res = arr.filter(String) // [1, 2, true, 4, Object, 6, 7, Object, 9, Array[1]]
Run Code Online (Sandbox Code Playgroud)
如果我们想要在arr对象,索引中过滤项目4,7我们会尝试 …
例如,我有一个像这样的对象:
obj1 = {
name: 'Bob',
age: 20,
career: 'teacher'
}
Run Code Online (Sandbox Code Playgroud)
现在我需要复制其部分属性而不是所有属性.
obj2 = {
name: '',
age: '',
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以这样做obj2.name = obj1.name,如果需要复制许多属性,这将是冗长的.还有其他快速方法可以解决这个问题吗?我试过了
let {name: obj2.name, age: obj2.age} = obj1;
但是得到了错误.
我想通过从中复制一些属性来从较大的对象创建一个新对象.我知道的所有解决方案都不是很优雅,我想知道是否有更好的选择,如果可能的原生(没有像下面代码末尾那样的附加功能)?
这是我现在通常做的事情:
// I want to keep only x, y, and z properties:
let source = {
x: 120,
y: 200,
z: 150,
radius: 10,
color: 'red',
};
// 1st method (not elegant, especially with even more properties):
let coords1 = {
x: source.x,
y: source.y,
z: source.z,
};
// 2nd method (problem: it pollutes the current scope):
let {x, y, z} = source, coords2 = {x, y, z};
// 3rd method (quite hard to read for such simple task): …Run Code Online (Sandbox Code Playgroud) 我还没有弄清楚如何使用新的ES语法的一件事是创建一个对象,该对象是基于声明的包含值的另一个的子集.
这是我正在尝试做的事情:
//input
let user = {
id: 123,
foo: 'foo',
bar: 'bar',
password: 'hunter2'
};
//output
let safeUser = {
id: user.id,
foo: user.foo,
bar: user.bar
}
//NOT this (I don't want to declare excluded vals)
let {password, ...safeUser} = user;
Run Code Online (Sandbox Code Playgroud)
如果不可能,任何人都知道某件事是否在起作用?我看了es es和贝贝尔但没有出现任何事情.
这就是我一直在做的事情:
var props = { id: 1, name: 'test', children: [] }
//copy props but leave children out
var newProps = { ...props }
delete newProps.children
console.log(newProps) // { id: 1, name: 'test' }Run Code Online (Sandbox Code Playgroud)
有更清洁,更简单的方法吗?
javascript ecmascript-harmony ecmascript-6 babeljs ecmascript-7
有什么方法可以解构对象并将其属性分配给数组而不是变量?例如:
const obj = { a: 1, b: 2 };
const { a, b } = obj;
const arr = [a, b];
Run Code Online (Sandbox Code Playgroud)
这可行,但是需要将变量重新声明为数组值。
我试过了:
const arr = [(const { a, b } = obj)];
Run Code Online (Sandbox Code Playgroud)
但这是语法错误。
我有一个类似的想法与Object.values作为
const arr = Object.values((const { red } = chalk));`
Run Code Online (Sandbox Code Playgroud)
...但是有一个同样的问题,就是无法对表达式进行解构。
是否可以将某个对象的某些键拆包到新对象?
比方说,我想按键(3个拷贝a,b,c从)test对象到一个新的对象(abc)。下面提到的代码将起作用。
const test = {a:1, b:2, c:3, d:4, e:5 };
const {a, b, c} = test;
const abc = { a, b, c, f: 6};
Run Code Online (Sandbox Code Playgroud)
有什么方法可以在一个语句中完成?
还有另一种方法。
const test = {a:1, b:2, c:3, d:4, e:5 };
const abc = { ...test, f: 6};
Run Code Online (Sandbox Code Playgroud)
但是,使用这种方法,我后来不得不删除不需要的键(d,e在我的情况)。
(最佳情况解决方案:如果我们不必跟踪不需要的密钥。可以有n个不需要的密钥。)
我正在尝试使用对象解构来提取变量,但这些变量已经存在,就像这样
const x=1, y=2 // Those should be 1 and 2
const {x,y} = complexPoint
const point = {x,y}
Run Code Online (Sandbox Code Playgroud)
有没有办法在不重命名解构变量的情况下做到这一点?有些人喜欢这样并更新点避免const定义?
const point = {x,y} = complexPoint
Run Code Online (Sandbox Code Playgroud)
预期的结果应该是使用对象解构
const x=1, y=2 // Those should be 1 and 2
const point = {
x:complexPoint.x,
y:complexPoint.y
}
Run Code Online (Sandbox Code Playgroud) 考虑以下对象:
const obj = {a: 1, b: 2, c: 3, d: 4, e: 5}
Run Code Online (Sandbox Code Playgroud)
是否有一个简单的语法来创建包含以下内容的新对象:
const obj2 = {a, b, d}
Run Code Online (Sandbox Code Playgroud)
我知道有下划线和lodash .pick(),但我希望有一些我可能不知道的解构技巧.
我经常困惑 javascript 中的对象解构是否适用于某些情况,我刚刚遇到过一个。在此代码中,我只是从this对象中获取属性并将它们分配给新对象上的相同属性/值data:
const data = {
rating: this.rating,
title: this.title,
text: this.text,
name: this.name,
location: this.location,
email: this.email,
files: this.files
};
Run Code Online (Sandbox Code Playgroud)
是否可以使用某种对象解构来完成此任务,或者它与此用例无关?