JavaScript缩小数组以在对象

问题描述

我正在尝试合并数组方法:reduce。 基本上,我要在这里完成的任务是将下面的数组简化为一个对象,其中任何与obj的键值匹配的对象。

const arr = ['a','c','e'];
const obj = { a: 1,b: 2,c: 3,d: 4 };

let output = select(arr,obj);
console.log(output); // --> { a: 1,c: 3 }

我的选择方法

function select(arr,obj) {
  let newObj = {};
  for (let prop in obj) {
    for (let i = 0; i < arr.length; i++) {
      if (prop === arr[i]) {
        newObj[prop] = obj[prop];
      }
    }
  }
  return newObj;
}

我将{}设置为arr.reduce的初始值设定项,例如,如果数组的当前值与对象的键匹配,则它将添加键值至累加器,但是我从控制台收到一条错误消息,如果表达式无法返回布尔值

这是我使用.reduce()的尝试:

function select(arr,obj) {
  let result = arr.reduce(function(x,y) {
    if (y in obj) {
      x[y] = obj[y]
      return x;
    }
  },{}) 
  return result;
}

请告知。

解决方法

您必须始终退还累加器。这是使用reduce的方法

df,df2,df3,df4 are Dataset<Row>

,

在所有情况下都应返回累加器。 我使用了一个使用过滤器的实现作为参考:

const arr = ['a','c','e'];
const obj = { a: 1,b: 2,c: 3,d: 4 };

function select (obj,arr){
    let newObj = Object.keys(obj).filter(key => arr.includes(key)).reduce((acc,key) => {
                    acc[key]=obj[key]
                    return acc 
                },{})
    return newObj
}
console.log(select(obj,arr)); 

,
function select(arr,obj) {
    return arr.reduce((acc,curr) => {
        if(obj[curr]) {
            acc[curr] = obj[curr];
        }
        return acc;
    },{})
}