我知道这个现有的问题,但我只对普通的javascript解决方案感兴趣(没有像lodash这样的外部库).
什么是最干净的方式(包括所有ES6的善良和超越 - 像对象休息和传播等)从javascript中获取具有来自另一个对象的道具子集的对象?
可以说,我要挑foo,bar和baz从source对象.我目前有两个解决方案,我不喜欢它们:
1.
const result = {
foo: source.foo,
bar: source.bar,
baz: source.baz
};
Run Code Online (Sandbox Code Playgroud)
2.
const { foo, bar, baz } = source;
const target = { foo, bar, baz };
Run Code Online (Sandbox Code Playgroud)
第二个是较短但是它用一些变量污染了当前的执行范围,并且它们的列表无论如何都必须写入两次.
PS.我也不想Object.prototype用一些辅助方法扩充或调用一些自定义函数来实现这一点.
我正在学习React,在此过程中,我正在开发自己的JavaScript技能,这些技能目前处于初学者水平。我有一个代表注册表单的组件,表单的输入值(用户名,电子邮件密码等)存储在该组件的状态中。
表单的状态如下:
this.state = {
username: "",
password: "",
email: "",
firstName: "",
lastName: "",
country: "",
region: "",
phoneNumber: "",
selectCountries: []
};
Run Code Online (Sandbox Code Playgroud)
留下来,我想创建一个新对象以传递给注册方法,该方法仅包括用户名,电子邮件和密码字段。最好的方法和最快的方法是什么?
目前,我要做的是手动映射所需的属性,如下所示:
const { username, email, password } = this.state;
let registrationData = {
username, email, password
};
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗?有什么办法可以将这两个语句合并为一个?
任何输入将不胜感激,非常感谢!
编辑:不是重复的,因为我的问题不要求删除特定键,而是在数组中找不到所有键。
在下面,函数从对象中redux1删除与未列出的键对应的条目。keys_to_keepdata
鉴于我有一个要保留的对象键列表,我如何redux1以更简洁的方式重写,最好使用map,filter或reduce?
var data = [
{name: 'John', city: 'London', age: 42},
{name: 'Mike', city: 'Warsaw', age: 18},
{name: 'Jim', city: 'New York', age: 22},
{name: 'Celine', city: 'Tokyo', age: 54},
]
var keys_to_keep = ['name', 'city']
function redux1(data) {
data.forEach((person) => {
Object.keys(person).forEach((key) => {
if (!keys_to_keep.includes(key)) {
delete (person[key])
}
})
})
console.log(data)
}
function redux2(data) {
var reduced = data.filter(person => Object.keys(person).filter(key => keys_to_keep.includes(key))) …Run Code Online (Sandbox Code Playgroud)说我有一个对象:
myObj = {
name: 'Luke',
age: 12,
height: '163cm',
weight: '60kg',
others: { one: '1', two: '2', three: '3'} // (Edited) Added one more key here :)
};
Run Code Online (Sandbox Code Playgroud)
我想要此对象的副本,但不具有指向新对象的某些键,其输出方式如下:
newObj = {
name: 'Luke',
age: 12,
one: '1',
two: '2'
};
Run Code Online (Sandbox Code Playgroud)
我已经看到了破坏的例子,但是我想知道嵌套对象是否有可能。使用解构是否可以实现这样的目的,否则,将是最有效的方法吗?
在rails中,我有一种特殊的slice 方法来保留Hash我需要的键.在哈希中仅允许所需的密钥非常方便.
在Node.js中有这样的方法吗?
我有一个具有这种形式的对象:
const obj = {
abc: "Moon",
def: "Earth",
asd: "Sun",
dmg: "Venus",
xyz: "Mars",
tuv: "Jupiter"
};
Run Code Online (Sandbox Code Playgroud)
以及这种形式的数组:
const arr = ["abc", "def", "tuv"];
Run Code Online (Sandbox Code Playgroud)
我想obj根据给出的值进行过滤arr.这意味着,有没有办法,可能使用过滤方法,obj变成这样:
const newObj = {
abc: "Moon",
def: "Earth",
tuv: "Jupiter"
};
Run Code Online (Sandbox Code Playgroud) 创建一个由选取的源属性组成的对象。
参数
source - 任何 JavaScript 对象keys - 一组 JavaScript 字符串返回值
一个新对象,包含键中列出的所有源属性。如果键列在键中,但未在源中定义,则该属性不会添加到新对象中。
例子
pick({ foo: 1, bar: 2, baz: 3 }, ['foo', 'baz']) // -> { foo: 1, baz: 3 }
pick({ qux: 4, corge: 5 }, ['bar', 'grault']) // -> {}
pick({ bar: 2 }, ['foo', 'bar', 'baz']) // -> { bar: 2 }
Run Code Online (Sandbox Code Playgroud)
我有
function pick(source, keys) {
let result = {};
for (key in source) {
if (key === keys) {
result[key];
}
}
return …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(),但我希望有一些我可能不知道的解构技巧.
假设我有一个对象数组,这里我假设对象具有三个属性,但可能更多,我想用属性名称提取其中一些:
objArr = [{
name : "name",
description : "description",
date : "date"
},{
name : "name",
description : "description",
date : "date"
},{
name : "name",
description : "description",
date : "date"
}]
Run Code Online (Sandbox Code Playgroud)
name比如说,我只想从上述 中提取 的值objArr。我可以使用以下方法来做到这一点:
(function(objArray){
objArray.forEach(function(arrObjItem) {
for(let name in arrObjItem) {
if(arrObjItem.hasOwnProperty(name)) {
console.log(objArrItem.name)
}
}
})
})(objArr)
Run Code Online (Sandbox Code Playgroud)
但我真正想要的是提取两个以上属性的值name和description/或值,如果问题具有不同的数据结构,每个对象有更多属性。最后,我想创建这些提取的属性的映射。(或具有提取的属性、值的新对象数组)(或具有提取的属性、值对的元组)。
我有一个清单
let data = [{order: 1, plannedid:32, userid:123 },
{order: 2, plannedid:33, userid:124 }];
let keys = ['orderid','plannerid'];
Run Code Online (Sandbox Code Playgroud)
根据我们需要从数组中获取所有列的键。
我可以使用以下代码按预期获取数据,
let tempData =[];
data.forEach(function(d) {
tempData.push({
orderid: d.orderid,
plannerid: d.plannerid
});
});
Run Code Online (Sandbox Code Playgroud)
输出:
[{order: 1, plannedid:32},
{order: 2, plannedid:33 }];
Run Code Online (Sandbox Code Playgroud)
但如果我的键数组是动态的,我们如何根据键读取
ex: let keys = ['orderid','userid'];
Run Code Online (Sandbox Code Playgroud)
我们可以在 Push 函数中添加条件吗
我需要用数组映射对象数据
const data = [
{name:"John", age:"22", weight:"60", height:"180cm"},
{name:"Emma",age:"25",weight:"55",height:"160cm"}
]
const key = ["name", "weight", "height"]
Run Code Online (Sandbox Code Playgroud)
我需要这样的结果
const result = [
{name:"John", weight:"60", height:"180cm"},
{name:"Emma", weight:"55",height:"160cm"}
]
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助