【发布时间】:2017-10-14 23:07:10
【问题描述】:
这两个参数都是对象列表。它们都包含属性名称。我想在属性名称相等的情况下投影他们的一些属性。下面给出正确的结果。但是,有人可以帮我将其重构为一次遍历吗?
export function fieldProjections(docTypeFields, recordFields) {
const recordsByName = recordFields.reduce(function (rec, field) {
rec[field.Name] = field;
return rec;
}, {});
const fields = docTypeFields.map(dt => {
return {
'Name': dt.Name,
'RawValue': recordsByName[dt.Name].RawValue,
'Type': dt.DataType,
'Value': recordsByName[dt.Name].Value,
'Id': dt.DocumentTypeFieldID
};
});
return fields;
}
【问题讨论】:
-
“将其重构为一次遍历?” - 为什么?当前代码每个输入数组只遍历一次,所以我看不出你怎么能遍历得更少。顺便说一句,如果您使用单个对象文字一次创建所有属性,则可以整理
.map()回调。 -
它不会比你已经拥有的更好。但是您可以使用 Map 而不是散列/“关联数组”。
-
我认为单次遍历是用词不当。我想在一个表达式中执行上述操作。
标签: javascript dictionary reduce