[英]I have a block of code I am unable to understand it
我在这里添加了一个 JavaScript 代码块。 我无法理解为什么要使用它。 如果有人明白这一点。
_objListofData = _objListofData.reduce(function(item, e1) { var matches = item.filter(function(e2) { return e1.Code == e2.Code }); if (matches.length == 0) { item.push(e1); } return item; }, []);
您的代码用于根据 _objListofData 数组中的代码过滤掉不同的结果。 请参阅下面的示例,您将对此有所了解。
var _objListofData = [{Code: 1},{Code: 2},{Code: 2}, {Code: 1},{Code: 2},{Code: 3}] _objListofData = _objListofData.reduce(function (item, e1) { var matches = item.filter(function (e2) { return e1.Code == e2.Code }); if (matches.length == 0) { item.push(e1); } return item; }, []); console.log(_objListofData);
它似乎正在根据Code
属性过滤掉数组中的重复项。 一种更直观的方法可能是:
const uniqueMap = _objListofData.reduce((map, item) => {
if (!map.has(item.Code)) {
map.set(item.Code, item);
}
return map;
}, new Map());
const uniques = Array.from(uniqueMap.values());
该代码将数组“减少”为单个 map。 如果它遇到一个在它被丢弃之前看到的键。 最后,它从Map
中获取唯一键的values
列表。
有趣的问题。 这里有一些建议:
分析输入的类型
我认为, _objListOfData
是一个 object 数组,上面有一个Code
属性,它的值是一个number
。 像这样的东西:
[
{ Code: 1 },
{ Code: 15 },
{ Code: 17 },
{ Code: 90 }
]
概括
代码目标是使用相同的Code
删除任何重复出现的 object 。 例如,从这个:
[{Code: 1}, {Code: 5}, {Code: 2}, {Code: 1}]
进入这个:
[{Code: 1}, {Code: 5}, {Code: 2}]
逐步了解
[]
。function(item, e1) {
var matches = item.filter(function(e2) {
return e1.Code == e2.Code
});
if (matches.length == 0) {
item.push(e1);
}
return item;
}
item
的值将从您传递的 initialValue 开始,经过一次迭代后,该值将传递给下一次迭代。 e1
的值将是_objListofData
数组中的每个项目。
item
将具有 [] 的值,而e1
将具有数组中某个项目的值,例如(例如)它是{ Code: 1 }
。 然后,它会 go 过滤你给的空数组,搜索任何具有相同代码的项目,如果有任何匹配,它将返回到var matches
。 然后,它检查matches
的长度,如果它等于 0,则没有匹配,因此该项目是唯一的,我们希望它们在我们的结果数组中。 最后,您要返回item
以便将其传递到下一次迭代。item
equals [ { Code: 1} ]
。 然后,假设我们的下一个项目是{ Code: 2 }
。 然后过滤器将再次工作,但没有匹配项,因此值{ Code: 2 }
将再次推送到item
数组。item
equals [ { Code: 1 }, { Code: 2 } ]
。 然后,假设我们的下一个项目是{ Code: 1 }
。 这一次,过滤器会取消这个值,所以这个值不会被压入item
数组。 因此我们的item
值仍然保持在[ { Code: 1 }, { Code: 2 } ]
。您绝对可以在这里查看综合指南: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.