H5W3
当前位置:H5W3 > 其他技术问题 > 正文

以下对象到数组的转换,有没有优雅的方式

const obj = {
M1:1,
M2:2,
M3:3,
P1:1,
P2:2,
P3:2,
P4:1
}
arr = [
{name:"M",value:6},
{name:"P",value:6}
]

回答

转换规则没有描述清楚啊,arr 里面 value 6 哪里来的?
obj 里面也没有 6 啊


const arr = Object.entries(obj)
    .reduce((arr, [key, value]) => {
        const index = key.charCodeAt(0)
        if (arr[index]) arr[index] += value
        else arr[index] = value
        return arr
    }, [])
    .map((value, index) => ({
        name: String.fromCharCode(index),
        value
    }))
    .filter(i => i)

每个人心中的”优雅“是不一样的,并且往往”优雅“的代码会降低代码的可读性。

var obj = {
    M1:1,
    M2:2,
    M3:3,
    P1:1,
    P2:2,
    P3:2,
    P4:1
}

// Fist, group to {M: 6, P: 6}
var group = Object.keys(obj).reduce((group, key) => {
  const groupKey = key.replace(/^([a-z]+)d+/i, '$1');
  group[groupKey] = obj[key] + (group[groupKey] || 0);
  return group;
}, {});

// Finally
var result = Object.keys(group).map(name => ({name, value: result[name]}))

console.log(result)

本文地址:H5W3 » 以下对象到数组的转换,有没有优雅的方式

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址