且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

JavaScript:如何映射两个对象以获取将第一个对象的 Id 映射到另一个对象的名称的输出?

更新时间:2023-01-08 12:54:25

const data1 = {attributes:[{Id:'test1',Name:'Test1',Type:'date'},{Id:'test2',Name:'Test2',Type:'string'},{Id:'test3',Name:'Test3',Type:'string'},{Id:'test4',Name:'Test4',Type:'boolean'}]}
      data2 = {value:[{test1:'10-12-2021',test2:'4'},{test3:'3',test4:true},{test1:'12-12-2023',test3:'42'}]};
      data3 = {value: []}

const mapper = (x, y) => {
  const row = x.attributes.map(e => [e.Id, e.Name])
        format = e => { switch (true) {
            case typeof e === 'boolean':
              return e ? 'Y' : 'N'
            case isNaN(e) && !isNaN(Date.parse(e)):
              return new Date(e).toLocaleDateString()
            default: return e
          }}
  const rows = (y.value.length ? y.value : [1]).map(e => 
     Object.fromEntries(row.map(([k, v]) => [v, format(e[k]) ?? '']))
  )
  return { rows }
} 

console.log(mapper(data1, data2))
console.log(mapper(data1, data3))

.as-console-wrapper { max-height: 100% !important; top: 0; }

说明:

y.value.length ?y.value : [1]

检查 data.value 是否为空,如果不是则返回 data.value.如果 yes 返回带有 1 个元素的 array(可以是任何值,只需要执行 1 次迭代即可满足您对空数据的要求,因此值在这里并不重要.

Checks if data.value is empty, if not returns data.value. If yes returns array with 1 element (can be any value, it is just needed to do 1 iteration to meet your requirement about empty data, so value doesn't really matter here.

其余代码应该很清楚,如果没有,请告诉我.

Rest of code should be pretty clear, if not, let me know.