按要求用代码转换成所需要的格式

题目描述

用一段代码按要求用代码转换成所需要的格式

题目来源及自己的思路

面试题:

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

[{id:1,key:"name",value:"张三"},
{id:2,key:"name",value:"李四"},
{id:2,key:"age",value:"男"},
{id:1,key:"address",value:"北京"},
{id:1,key:"phone",value:"13812341234"},
]

转换成

[{"id":"1","name":"张三","address":"北京","phone":13812341234},
 {"id":"2","name":"李四"}]

你期待的结果是什么?实际看到的错误信息又是什么?

大神请知道写出代码

阅读 2.4k
4 个回答

function transform ( input = [] ) {
return Object.entries( input.reduce( ( obj, { id, key, value } ) => ( obj[ id ] = { ...( obj[ id ] || {} ), [ key ] : value }, obj ), {} ) ).map( ( [ id, value ] ) => ( { ...value, id } ) );
}

手机盲打的,可能比较乱。

写了个笨办法:

var array = [
    { id: 1, key: 'name', value: '张三' },
    { id: 2, key: 'name', value: '李四' },
    { id: 2, key: 'age', value: '男' },
    { id: 1, key: 'address', value: '北京' },
    { id: 1, key: 'phone', value: '13812341234' }
];

var result = array.reduce(function(item1, item2) {
var index = item1.findIndex(item => item.id === item2.id);
    var newObj = {
      id: item2.id,
      [item2.key]: item2.value
    };
    if (index >= 0) {
      item1[index] = { ...item1[index], ...newObj };
    } else {
      item1.push(newObj);
    }
    return item1;
}, []);

console.log(result);
function transfrom(arr = []) {
    return Object.entries(arr.reduce((pre, cur) => {
        const { id, key, value } = cur
        pre[id] = pre[id] || {}
        pre[id][key] = value
        return pre
    }, {})).map(([key, val]) => ({id: key, ...val}))
}

前端大神!!

[{"id":"1","name":"张三","address":"北京","phone":13812341234},
{"id":"2","name":"李四","age":"男"}]
如果是这种呢?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题