gpt4 book ai didi

javascript - 如何根据多个数组的匹配创建一个对象

转载 作者:行者123 更新时间:2023-11-29 16:33:11 26 4
gpt4 key购买 nike

给定 array1array2 我应该创建一个对象,其中属性和值来自两个数组之间的交集匹配。

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' }

有没有比这个实现更好或更简洁的方法来编写它?

最佳答案

您可以使用reduce()来构建一个对象,仅添加找到匹配项的键。

function objOfMatches(array1, array2, cb) {
return array1.reduce((obj, item) => {
if (array2.includes(cb(item))) obj[item] = cb(item)
return obj
}, {})

}


console.log(objOfMatches(['hi', 'howdy', 'bye', 'later', 'hello'], ['HI', 'Howdy', 'BYE', 'LATER', 'hello'], function(str) {
return str.toUpperCase();
}));

这很简单,但它的行为复杂度为 O(n²),因为 includes 会通过 array2 查找 array1 中的每个项目。这对于小列表来说可能并不重要,但如果列表很大,可能值得创建某种类型的散列(例如 Set 或对象),以便为您提供对 array2< 的恒定时间查找.

类似于:

function objOfMatches(array1, array2, cb) {
let set = new Set(array2)
return array1.reduce((obj, item) => {
if (set.has(cb(item))) obj[item] = cb(item)
return obj
}, {})

}


console.log(objOfMatches(['hi', 'howdy', 'bye', 'later', 'hello'], ['HI', 'Howdy', 'BYE', 'LATER', 'hello'], function(str) {
return str.toUpperCase();
}));

关于javascript - 如何根据多个数组的匹配创建一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53795262/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com