[英]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.