如何用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”返回一个新的
对象
,其属性是给定
对象
中的属性,其
存在于给定的
数组

注:

  • 如果键存在于给定的
    数组中,但不在给定的
    对象中,则应忽略它们

  • 它不会修改传入的对象

(a) 可以过滤
数组
,查看元素是否与
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]}:{}”做什么的?请注意这是一个家庭作业问题。直接回答家庭作业问题是没有帮助的。因为它不能帮助该人员学习指定的主题。请检查此指南并相应地编辑您的问题