gpt4 book ai didi

javascript - 为什么我们需要在函数中将映射的 bool 值缩减为单个值?

转载 作者:行者123 更新时间:2023-12-05 01:16:45 25 4
gpt4 key购买 nike

为什么我们需要在函数结束时reduce映射的 bool 值到单个值?

该函数的目的是使用 key value 对从另一个对象(第二个参数)过滤对象数组(第一个参数)。

它应该返回另一个 object 数组,其中第一个参数中的对象与第二个参数中的 keyvalue 匹配。

例如,如果第一个参数是 [{ first: "Romeo", last: "Montague"}, { first: "Mercutio", last: null }, { first: "Tybalt", last: "凯普莱特”}]

第二个是{ last: "Capulet"}

函数应该返回 [{ first: "Tybalt", last: "Capulet"}]

这是我偶然发现的解决方案,无法理解 map() 和 reduce() 在这里的工作原理。

function whatIsInAName(collection, source) {
var srcKeys = Object.keys(source);

return collection.filter(function (obj) {
return srcKeys
.map(function(key) {
return obj.hasOwnProperty(key) && obj[key] === source[key];
})
.reduce(function(a, b) {
return a && b;
});
});
}

谢谢!

最佳答案

首先,该函数创建一个数组,其中包含它需要在 srcKeys 中查找的所有键,例如['最后']。为了正确说明该算法,假设您正在寻找两个键,source = { last: 'Capulet', first: 'Jon' }['last', '第一']

然后它将该数组映射到 bool 数组,其中每个值表示 collection 中的项目是否具有该键以及它的值是否与 source 中的值相同.例如:

['last', 'first'] → [true, true]    // or
['last', 'first'] → [false, false] // or
['last', 'first'] → [false, true] // ...

然后它将这个 bool 值数组缩减为单个 bool 结果,只有当数组中的所有项都为 true 时,该结果才会为 true:

[true, true]   → true
[false, false] → false
[false, true] → false

FWIW,您可以使用 Array.prototype.every 一步完成:

return collection.filter(obj => {
return srcKeys.every(key => obj.hasOwnProperty(key) && obj[key] === source[key]);
});

关于javascript - 为什么我们需要在函数中将映射的 bool 值缩减为单个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52604270/

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