如何用JavaScript编写具有数组和对象输入的最快选择函数?
编写一个名为“选择”的函数 给定一个如何用JavaScript编写具有数组和对象输入的最快选择函数?,javascript,arrays,object,javascript-objects,Javascript,Arrays,Object,Javascript Objects,编写一个名为“选择”的函数 给定一个数组和一个对象,“select”返回一个新的对象,其属性是给定对象中的属性,其键存在于给定的数组中 注: 如果键存在于给定的数组中,但不在给定的对象中,则应忽略它们 它不会修改传入的对象 (a) 可以过滤数组,查看元素是否与obj (b) 可以创建一个空的对象作为占位符 (c) 可以使用推送或其他方法将与键匹配的元素添加到新的对象 var arr = ['a', 'c', 'e']; var obj = { a: 1, b: 2, c: 3,
数组
和一个对象
,“select”返回一个新的对象
,其属性是给定对象
中的属性,其键
存在于给定的数组
中
注:
- 如果键存在于给定的
数组中,但不在给定的
对象中,则应忽略它们
- 它不会修改传入的对象
数组
,查看元素是否与obj
(b) 可以创建一个空的对象作为占位符
(c) 可以使用推送或其他方法将与键
匹配的元素添加到新的对象
var arr = ['a', 'c', 'e'];
var obj = {
a: 1,
b: 2,
c: 3,
d: 4
};
function select(arr, obj) {
var nuObj = {};
for (var i in arr) {
for (var key in obj) {
if (arr[i] === key) {
nuObj[key] = obj[key];
}
}
} return nuObj;
}
var output = select(arr, obj);
console.log(output); // --> { a: 1, c: 3 }
(d) 可以返回新的对象
var arr = ['a', 'c', 'e'];
var obj = {
a: 1,
b: 2,
c: 3,
d: 4
};
function select(arr, obj) {
var nuObj = {};
for (var i in arr) {
for (var key in obj) {
if (arr[i] === key) {
nuObj[key] = obj[key];
}
}
} return nuObj;
}
var output = select(arr, obj);
console.log(output); // --> { a: 1, c: 3 }
您可以映射对象并检查键是否存在,然后返回一个新对象,否则返回一个空对象以分配给单个对象
我们来看看这一行
Object.assign(...arr.map(k => k in obj ? { [k]: obj[k] } : {}))
获取对象并返回单个对象
Object.assign( )
,采用类似数组的iterable,并将项用作参数
...
对于参数,取arr
并为数组的每个项映射一个对象
arr.map( )
这是的回调
其中,使用检查来测试对象中是否存在属性
k in obj ? :
如果存在,则返回一个新对象和原始对象的值
{ [k]: obj[k] }
否则,返回一个空对象,该对象在后面的object.assign中是中性的
{}
var arr=['a','c','e'],
obj={a:1,b:2,c:3,d:4},
result=Object.assign(…arr.map(k=>k在obj?{[k]:obj[k]}:{}));
控制台日志(结果)代码>您可以使用
var-arr=['a','c','e'];
var obj={a:1,b:2,c:3,d:4};
设op=arr.reduce((op,inp)=>{
if(obj[inp]){
op[inp]=obj[inp]
}
返回操作
},{})
console.log(op)
您可以使用.reduce()
:
var-arr=['a','c','e'];
var obj={
答:1,,
b:2,
c:3,
d:4
};
var select=(arr,obj)=>arr.reduce((r,c)=>(obj中的c?r[c]=obj[c]:r,r),{});
console.log(选择(arr,obj))代码>您可以在arr
上使用reduce()
:
var-arr=['a','c','e'];
var obj={a:1,b:2,c:3,d:4};
让res=arr.reduce((acc,curr)=>
{
if(对象hasOwnProperty(当前))
acc[当前]=obj[当前];
返回acc;
}
,{});
控制台日志(res)代码>好吧,这个比较短:
function select(arr, obj) {
var resultObj = {};
for (var value of arr) value in obj && (resultObj[value] = obj[value])
return resultObj;
}
与对象一起使用。键
+也可用于
循环,但速度要慢得多
function select(arr, obj) {
var resultObj = {}, keys = Object.keys(obj);
for (var value of arr) keys.includes(value) && (resultObj[value] = obj[value])
return resultObj;
}
小心if(obj[k])
,尝试更改obj.a=0
,看看我的意思。我明白了!谢谢我不明白这个“…arr.map(k=>k在obj中?{[k]:obj[k]}:{})”为什么是三个句点?“k=>k在obj中是什么?{[k]:obj[k]}:{}”做什么的?请注意这是一个家庭作业问题。直接回答家庭作业问题是没有帮助的。因为它不能帮助该人员学习指定的主题。请检查此指南并相应地编辑您的问题