javascript - 如何从多个数组的匹配中创建对象
问题描述
给定array1
,array2
我应该创建一个对象,其中属性和值来自两个数组之间的交集匹配。
function objOfMatches(array1, array2, cb) {
var obj = {};
var newArray1 = array1.map(cb);
for (let i = 0; i < newArray1.length; i++) {
if( !(array2.indexOf(newArray1[i]) == -1) ) {
obj[newArray1[i].toLowerCase()] = newArray1[i];
}
}
return obj;
}
console.log(objOfMatches(['hi', 'howdy', 'bye', 'later', 'hello'], ['HI', 'Howdy', 'BYE', 'LATER', 'hello'], function(str) { return str.toUpperCase(); }));
// should log: { hi: 'HI', bye: 'BYE', later: 'LATER' }
有没有比这个实现更好或更干净的方法来编写它?
解决方案
很不清楚该函数应该做什么,这使得它难以阅读。相反,您应该分开任务:
const intersection = (a, b) => a.filter(it => b.includes(it));
const toMap = (values, mapper) => Object.assign({}, ...values.map(value => ({ [mapper(value)]: value })));
const matches = intersection(array1.map(it => it.toUpperCase()), array2);
const result = toMap(matches, value => value.toLowerCase());
推荐阅读
- arrays - React Native过滤对象数组需要很长时间或变量未更新
- python - 熊猫,如何找到互补的时间范围?
- java - 根据没有 GroupBy 的条件将 Flux 一分为二
- python - Python定时器覆盖
- rust - Rust:什么是 tokio::select macthing
- javascript - 如何根据网站 SQL 数据库中的数据促进时间事件?
- c - GCC 7.5.0 中的优化选项如何改变全局变量的地址顺序?
- discord.py - Discord.Py 在循环时停止命令
- bash - 用户定义的文件类型来替换默认值
- ios - 如果用户再次安装应用程序,则 InApp 购买模型问题