如何将输入从对象数组改为单个对象以获得相同输出结果?
问题描述
原来的代码可基于对象数组input和reference数组,以reference.value2作为属性键生成新对象数组,代码如下:
const reference = [ { value1: "valueA", value2: "valueB" }, { value1: "valueC", value2: "valueD" }, { value1: "valueE", value2: "valueF" } ]; const input = [ { valueA: 'some text'}, { valueC: 'some more text'}, { valueX: 'text to ignore'}, // valueX不在reference中,会被忽略 { valueE: 'yet more text'} ]; const outputArray = reference.map(({ value1, value2 }) => { const found = input.find(obj => obj[value1]); return { [value2]: found[value1] }; }); console.log(outputArray)
输出结果:
[ { valueB: 'some text'}, { valueD: 'some more text'}, { valueF: 'yet more text'} ]
现在需要将input从对象数组改为单个对象:
const input = { valueA: 'some text', valueC: 'some more text', valueX: 'text to ignore', // valueX不在reference中,会被忽略 valueE: 'yet more text' }
请问如何修改代码以实现相同的输出结果?
修改后的代码实现
直接简化map中的逻辑即可,因为input已经是单个对象,无需再用find遍历数组,直接通过属性名访问对应值:
const reference = [ { value1: "valueA", value2: "valueB" }, { value1: "valueC", value2: "valueD" }, { value1: "valueE", value2: "valueF" } ]; const input = { valueA: 'some text', valueC: 'some more text', valueX: 'text to ignore', valueE: 'yet more text' }; const outputArray = reference.map(({ value1, value2 }) => { // 直接从input对象中获取对应value1的属性值 return { [value2]: input[value1] }; }); console.log(outputArray);
补充优化(可选)
如果担心input中不存在某个value1对应的属性导致返回undefined,可以添加过滤逻辑,只保留有有效值的项:
const outputArray = reference .filter(({ value1 }) => input.hasOwnProperty(value1)) .map(({ value1, value2 }) => ({ [value2]: input[value1] }));
内容的提问来源于stack exchange,提问作者redditor
相关产品推荐
相关产品推荐

