簡體   English   中英

JavaScript 減少數組以在對象中查找匹配項

[英]JavaScript Reduce an array to find match in Object

我正在嘗試合並數組方法: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

 function select(arr, obj) { return arr.reduce(function (acc, key) { if (key in obj) acc[key] = obj[key]; return acc; }, {}); } 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 }

在所有情況下都應返回累加器。 我使用了一個使用過濾器的實現供您參考:

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;
    }, {})
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM