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