![](/img/trans.png)
[英]Generate new array of object from comparing object keys in dynamic array of object values
[英]Comparing Array Values With Object Keys
編寫一個名為“select”的函數。
給定一個數組和一個對象,“select”返回一個新對象,其屬性是給定對象中的屬性,並且其鍵存在於給定數組中。
var arr = ['a', 'c', 'e'];
var obj = {
a: 1,
b: 2,
c: 3,
d: 4
};
var output = select(arr, obj);
console.log(output); // --> { a: 1, c: 3 }
我的解決方案:
function select(arr, obj) {
for (var k in obj) {
return arr.reduce((o, c) => {
if (obj.hasOwnProperty(c)) {
o[c] = obj[c]
}
return o
}, {})
}
}
var array = ['a', 'c', 'e'];
var object = {
a: 1,
b: 2,
c: 3,
d: 4
};
console.log(select(array, object));
我的解決方案有效,但我感覺我沒有使用最佳實踐或最雄辯的代碼。 例如,我使用 for/in 來搜索對象,但我從不使用 for (var k in obj) 中的“k”。 任何提示將不勝感激。
獲取對象的鍵與數組中的鍵的交集,有兩種方法:
您不必執行兩個循環。 第一種方法對小對象更有效,第二種方法也適用於大對象和小子集。
function select(arr, obj) {
let o = {};
for (let k in obj)
if (arr.includes(k))
o[k] = obj[k];
return o;
}
function select(arr, obj) {
let o = {};
for (let k of arr)
if (k in obj)
o[k] = obj[k];
return o;
}
您也可以使用reduce
代替for … of
循環,就像您成功地所做的那樣(我不會重復該解決方案),但兩者中哪一個更易於閱讀和理解,只有您可以決定。
使用 Array#reduce 迭代數組並將對象上存在的所有屬性提取到新對象:
const arr = ['a', 'c', 'e']; const obj = { a: 1, b: 2, c: 3, d: 4 }; const select = (arr, obj) => arr.reduce((r, prop) => { obj.hasOwnProperty(prop) && (r[prop] = obj[prop]); return r; }, {}); const output = select(arr, obj); console.log(output); // --> { a: 1, c: 3 }
您可以使用Object.assign()
和reduce()
並在內部檢查對象中是否存在屬性。
var arr = ['a', 'c', 'e']; var obj = { a: 1,b: 2,c: 3, d: 4}; let select = (arr, obj) => arr.reduce((r, e) => Object.assign(r, obj[e] ? {[e]: obj[e]} : null), {}) var output = select(arr, obj); console.log(output); // --> { a: 1, c: 3 }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.